Не удается получить jQuery для получения JSON из другого домена (с использованием JSONP) - PullRequest
3 голосов
/ 25 марта 2011

Я использую API (который я создал и при необходимости могу изменить), который выплевывает некоторый JSON (используя json_encode PHP, поэтому он действителен). Я использую его на другом сайте в другом домене для получения данных.

К сожалению, я не могу заставить его работать. Запрос сделан, и данные, насколько я могу судить, получены из инструментов разработчика Chrome (результаты были загружены из API). Похоже, дальнейшая обработка не происходит.

URL-адрес запроса выглядит следующим образом (заменив 'query' реальным запросом, в данном случае именем группы):

http://gatekrash.com/api/v1?t=search&s=national&p=0&n=15&q=QUERY&callback=?

Ссылка на страницу результатов с запросом "Ной и кит"

Результаты выглядят так (действительный JSON):

[{"id":"4123","title":"Noah And The Whale","type":null,"start":"2011-03-30 19:30:00","end":"2011-03-31 00:30:00","venue":{"id":"154","name":"The Deaf Institute"},"place":{"id":"17374","name":"Manchester"},"source_count":"1","performers":""},{"id":"9317","title":"Noah And The Whale","type":null,"start":"2011-05-04 19:00:00","end":"2011-05-05 00:00:00","venue":{"id":"539","name":"Leeds Metropolitan University"},"place":{"id":"15473","name":"Leeds"},"source_count":"1","performers":""}]

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

$(document).ready(function(){
    getSearch("Noah and the Whale");
});
$(document).ready((function(query) {
getSearch = function(query) {
    url = "http://gatekrash.com/api/v1?t=search&s=national&p=0&n=15&q=" + query + "&callback=?";
    $.getJSON(url,
        function(json) {
            alert("Success!");
        }
    );
}
})());

Насколько я знаю, это должно работать. Я использую в основном тот же код (за исключением обратного вызова =?) На сайте, к которому принадлежит API, для получения данных без проблем, поэтому я думаю, что это, вероятно, междоменная вещь.

Решение, вероятно, определенно что-то настолько очевидное и простое, но мне не удалось заставить его работать.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 09 февраля 2013

Для работы междоменного JSONP необходим обратный вызов.

«P» означает «Мягкий»;а именно с вызовом функции.Чтобы обойти междоменную политику, для каждого запроса JSONP jQuery создает тег сценария в DOM с URL-адресом запроса в качестве источника.JSON загружается в тег script и затем выполняется, как и любой другой скрипт.Проблема заключается в том, что выполнение объекта не делает ничего особенного, поэтому вместо него оборачивается вызов функции, так что объект передается в качестве аргумента для этого обратного вызова.

JSON: (обычно загружается как текст непосредственно вjavascript с использованием XMLHttpRequest и т. п.)

{ "really":"simple", "example":"object" }

JSONP: (обычно загружается в тег сценария, чтобы избежать междоменной политики)

nameOfCallback({ "really":"simple", "example":"object" })

Последний вызовет метод nameOfCallback, когдаJSONP загружается, передавая объект в качестве единственного параметра.

Для будущих гуглов, этот этот ответ может предоставить дополнительную помощь.

0 голосов
/ 25 марта 2011

Я думаю, что может быть проблема с междоменной областью:

http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

...