Проблема JQUERY JSONP

Я использую Jquery 1.6.2.

Это работает:

$.getJSON("http://b.webvm.net/?jsoncallback=?",
    function(data) {
        alert("OK");
    });
});

но это не так:

$.getJSON("http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=?",
    function(data){
        alert("OK");
    });
});

Оба удаленных файла выглядят одинаково:

http://b.webvm.net/?jsoncallback=?

а также

http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=?

однако во втором примере предупреждающее сообщение никогда не срабатывает.


person user831839    schedule 06.07.2011    source источник


Ответы (2)


Текстовый файл не предоставляет функцию обратного вызова, как это делает другая ссылка. jQuery на самом деле не вызывает http://b.webvm.net/?jsoncallback=? но вместо этого что-то вроде http://b.webvm.net/?jsoncallback=jQuery2239203480932480392849032809, который затем в свою очередь вызывает эту функцию в вашем скрипте:

jQuery2239203480932480392849032809({"name" : "hello world"});

С другой стороны, текстовый файл не вызывает никаких функций, даже если jQuery добавляет функцию обратного вызова http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=jQuery2239203480932480392849032809 возвращает

({"name" : "hello world"});

Чтобы решить эту проблему, вы можете использовать параметр jsonpCallback в своем запросе ajax, чтобы заставить jQuery использовать статическую функцию, в которую вы затем обернете свой json.

Например, если вы установите jsonpCallback на «mycallback», ваш текстовый файл должен вернуть:

mycallback({"name" : "hello world"});
person Niklas    schedule 06.07.2011

Я заметил, что первый пример возвращается с типом mime "text/html", а второй - с "text/plain". Ваш браузер может неправильно интерпретировать MIME-тип text/plain. Попробуйте вернуть второй обратно как text/html или application/json

person joekarl    schedule 06.07.2011