2012-04-27 6 views
1

Я получаю данные из API Flickr с среднего человека файл (чтобы избежать crossdomain проблем):преобразовать строку в формате JSON с JQuery

<?php 

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

die(json_encode(file_get_contents($_REQUEST['url']))); 
?> 

Этот файл извлекается с помощью JavaScript:

//Flickr 
var myurl = encodeURIComponent('http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=1408bff5f72a4b84b924d13e8562b6a2&[email protected]&photoset_id=72157629903184261&format=json'); 
    $.getJSON("middle.php?url=" + myurl, function(data){ 
     console.log(typeof data); 
    }); 

Но console.log показывает, что результатом является «строка», а не объект JSON. Ive пытался преобразовать его в объект JSON с:

jQuery.parseJSON(data) 

но консоль дал мне эту ошибку:

Uncaught SyntaxError: Unexpected token j 

Это строка:

jsonFlickrApi({"photoset":{"id":"72157629903184261", "primary":"7115173307", "owner":"[email protected]", "ownername":"wedocommunication", "photo":[{"id":"7115173331", "secret":"24900ff306", "server":"5447", "farm":6, "title":"Lounge", "isprimary":"0"}, {"id":"7115173307", "secret":"3435f9a983", "server":"7256", "farm":8, "title":"Hofansicht", "isprimary":"1"}, {"id":"7115173379", "secret":"7747e50597", "server":"7278", "farm":8, "title":"Konfi", "isprimary":"0"}, {"id":"6969093048", "secret":"d4389bc0e4", "server":"7055", "farm":8, "title":"Lounge", "isprimary":"0"}, {"id":"6969093086", "secret":"8e7263005b", "server":"5152", "farm":6, "title":"Eingangsbereich", "isprimary":"0"}], "page":1, "per_page":500, "perpage":500, "pages":1, "total":"5"}, "stat":"ok"}) 

Что я мог сделать преобразовать строку в объект?

ответ

0

кто-нибудь опубликовать ответ, который я искал, но по какой-то причине они удалили пост, поэтому я копирую его здесь:

$.ajax({ 
    url: 'http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=1408bff5f72a4b84b924d13e8562b6a2&[email protected]&photoset_id=72157629903184261&format=json', 
    type: 'GET', 
    dataType: 'jsonp', 
    jsonpCallback: 'jsonFlickrApi', 
    success: function(data){ 
     console.log(data); 
    } 
}); 

Это делает работу отлично. Спасибо, кто бы это ни был :)

Возможно, другие работы тоже, но это тот, который я чувствую себя более комфортно. Спасибо вам всем.

5

Flickr возвращает ответ как JSONP, это Javascript не JSON, и вы должны использовать запрос типа JSONP Jquery для этого, см - http://api.jquery.com/jQuery.ajax/

в том, что страница дает пример для фликре API-

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", 
    { 
    tags: "cat", 
    tagmode: "any", 
    format: "json" 
    }, 
    function(data) { 
    $.each(data.items, function(i,item){ 
     $("<img/>").attr("src", item.media.m).appendTo("#images"); 
     if (i == 3) return false; 
    }); 
    }); 
+1

и, как @ocanal отметил в своем ответе, вам не нужен прокси-сервер для этого – chrismarx

+0

Это не будет рабочим либо: http://pastebin.com/ZEKWTSCc я не получаю никакого вывода –

+0

это работает как это - HTTP://pastebin.com/n7WCJrGZ, глядя на то, почему работа urs doenst – chrismarx

0

JSON начинается с объекта фигурной скобки {jsonFlickrApi( не является частью объекта JSON. Сначала вы можете поместить replacedata, прежде всего, чтобы удалить часть jsonFlickrApi(, если вам нужна только внутренняя, но, похоже, у Flickr будет лучшее встроенное решение.

0

Вам нужно будет удалить это «jsonFlickrApi» («в начале» и «)» в конце, поэтому «строка json» читается только {"photoset":{"id":"72157629903184261", "primary":"7115173307", "owner":"[email protected]", "ownername":"wedocommunication", "photo":[{"id":"7115173331", "secret":"24900ff306", "server":"5447", "farm":6, "title":"Lounge", "isprimary":"0"}, {"id":"7115173307", "secret":"3435f9a983", "server":"7256", "farm":8, "title":"Hofansicht", "isprimary":"1"}, {"id":"7115173379", "secret":"7747e50597", "server":"7278", "farm":8, "title":"Konfi", "isprimary":"0"}, {"id":"6969093048", "secret":"d4389bc0e4", "server":"7055", "farm":8, "title":"Lounge", "isprimary":"0"}, {"id":"6969093086", "secret":"8e7263005b", "server":"5152", "farm":6, "title":"Eingangsbereich", "isprimary":"0"}], "page":1, "per_page":500, "perpage":500, "pages":1, "total":"5"}, "stat":"ok"}.

Это может быть проанализировано JS как регулярные данные JSON.

+0

Он возвращает эту оболочку по какой-либо причине , это ответ JSONp. – freshnode

2

Вам не нужно использовать прокси-сервер, чтобы избежать проблем с crossdomain, просто сделайте это с помощью JSONP request.

$.getJSON("http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=1408bff5f72a4b84b924d13e8562b6a2&[email protected]&photoset_id=72157629903184261&format=json&jsoncallback=?",function(data){ 
     console.log(data); 
    });​ 

DEMO

0

Как уже упоминалось выше, Flickr отправляет ответ JSON, завернутый в метод обратного вызова jsonFlickrApi.

Чтобы вернуть только чистые данные JSON, вы можете использовать параметр запроса nojsoncallback=1.

E.g.http://api.flickr.com/services/rest/?method=flickr.photos.getSizes&api_key=_secret_app_key&photo_id=8321754843&format=json&nojsoncallback=1

Смежные вопросы