2012-02-27 5 views
1

ОК по какой-то причине мой скрипт не возвращает никаких данных из файла JSON, который вызывается с стороннего сайта.jQuery + JSONP возвращает пустые данные?

Вот код

$(document).ready(function() { 
    var url = "http://konachan.net/post/index.json?limit=20&tags=hatsune_miku"; 
    $.getJSON(url + "&callback=?", null, function(items) { 
     for(i in items) { 
      item = items[i]; 
         $("#content").append('<div class="product" id="product-' + item.id + '"><img src="' + item.preview_url + '" width="135" height="138"/><div class="title">' + item.author + '</div><div class="description" style="overflow:hidden;">' + item.tags + '</div><div class="clear"></div></div>'); 
     } 
    }); 
}); 

Какого черта с ним не так?

Edit: PHP Curl до сих пор нет работы: http://pastebin.com/5gVUviZw

+0

http://jsfiddle.net/DM77K/ - Посмотрите данные об ошибках в консоли при загрузке этого JSFiddle. – Jasper

ответ

3

Я ударил URL http://konachan.net/post/index.json?limit=20&tags=hatsune_miku&callback=test с параметром обратного вызова, и я не вижу JSON, обернутый в имени функции.

Как работает JSONP, когда вы передаете имя функции обратного вызова, сервер должен обернуть JSON в этой функции, чтобы при возврате JavaScript с сервера вызывалась функция обратного вызова, а данные JSON передавались в как параметр.

// "test" was the callback parameter I used 
test({ "my": "data" , "returned_from" : "server" }); 

Под капотом JSONP использует элементы сценария для загрузки JavaScript (JSON) с удаленного сервера.

Поскольку JSON в вашем URL-адресе не привязан к имени функции, вы не можете получить доступ к нему через междоменный доступ. Вот Wikipedia Article on JSON with Padding, что объясняется более подробно.

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

Если параметр для обертывания результата в имени функции отсутствует, вы можете использовать прокси-сервер на стороне сервера, чтобы получить ответ JSON и завернуть его в функцию, которую вы затем вернете на клиентскую сторону.

+0

нет функции обратного вызова для json, поэтому я использую ее только «страницу», «лимит» и «теги» –

+0

, как использовать серверный прокси-сервер? –

+1

серверный прокси-сервер - отличная идея в этом случае, так как ваш ресурс, похоже, не поддерживает crossdomain ajax cals/jsonp. В основном (на вашем сервере) вы загрузите данные url и распечатаете их на экране, чтобы вам не пришлось переходить к crossdomain, чтобы получить его через javascript. – Vigrond

1

Поскольку код, возвращенный с сайта третьей стороны, явно не предназначен для вызова JsonP, он просто возвращает массив с данными, такими как []. Но он должен возвратить этот массив и вызвать функцию js, чтобы ваш скрипт мог получить доступ к данным типа myCallbackFunc([]).

Искать jsonp на этой странице для получения более подробной информации http://api.jquery.com/jQuery.ajax/.

+0

хорошо, что мне нужно сделать переместить это в формат XML? просто замените .json в url на .xml или он столкнется с той же проблемой, что и JSON? –

+0

@cl - Ты все еще сталкиваешься с теми же проблемами. С XML вы еще более ограничены.Вы не можете совершать перекрестные вызовы AJAX. Ваш единственный вариант либо похоронен в документации (например, найдите параметр, который будет использоваться для получения оболочки дополнений/функций), либо используйте прокси-сервер на стороне сервера, чтобы получить JSON и обернуть вокруг него функцию. – jmort253

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