JQuery JSONP междоменный вызов ничего не делает - PullRequest
4 голосов
/ 08 октября 2010

Всякий раз, когда я делаю вызов JSONP через jquery на любую страницу, которую я настроил (локально или на моем сервере), все, что я получаю, - это тихая обработка.Firebug сообщает 200 OK, и ответ выглядит хорошо.Я настраиваю окна предупреждений для всплывающих окон при успехе или неудаче, но ни один не появляется.Кажется, не имеет значения, какой URL я использую, ничего не появляется.

НО, если я использую страницу json в Твиттере, тогда я получаю окно с сообщением об успешном завершении, как и ожидалось, поэтому в моем ответе явно что-то не так, ноне знаю что.

В качестве эксперимента я скопировал ответ Twitter JSON и загрузил его в мой домен booroo.com.Это должно быть идентично, но все равно ничего.Я установил заголовки на странице ответов на «application / json» и utf-8, но все равно ничего.

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

$.ajax({
  dataType: 'jsonp',
//  url: 'http://booroo.com/json.asp?callback=?',
  url: 'http://twitter.com/users/usejquery.json?callback=?',
  success: function () {
        alert("Success");     
    },
    error: function(x,y,z) {
        alert("error"+x.responseText);
    }       
});

Файл ответа json.asp содержит следующие классические заголовки ASP, а затем ответ json, скопированный из твиттера (другие я тоже безуспешно пробовал).

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
response.ContentType="application/json"
Response.CodePage = 65001 
Response.CharSet = "UTF-8" 
%>({"test_param":12345});

Ответы [ 2 ]

10 голосов
/ 08 октября 2010

У вас проблемы, потому что на самом деле ответ не такой:)

Когда вы указываете jsonp или callback=?, его заменяют, на самом деле он делает: ?callback=functioName, что превращает ваш ответ в нечто подобное:

{"test_param":12345}

К этому:

functionName({"test_param":12345});

Это , необходимое для работы JSONP. Проверьте обновленный URL, чтобы понять, что я имею в виду: http://twitter.com/users/usejquery.json?callback=functionName

1 голос
/ 08 октября 2010

ОК после хорошего ночного сна я решил проблему. Я не осознавал, что это разница между двумя форматами ответов. Когда я отправил запрос в твиттер, просто используя мой браузер, в ответ не вошло название функции, которое меня смутило.

//JSON
{"name":"stackoverflow","id":5}
//JSONP
func({"name":"stackoverflow","id":5});
...