2010-10-08 1 views
4

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

НО, если я использую страницу twitter 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}); 

ответ

1

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

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

Как раз как отзыв, вы должны принять ответы (например, выше, то же описание проблемы и исправить), а не повторять одно и то же содержимое заново. –

10

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

При указании jsonp или callback=? он заменяется, он фактически делает: ?callback=functioName, который превращает ваш ответ от чего-то вроде этого:

{"test_param":12345} 

Для этого:

functionName({"test_param":12345}); 

Вот необходимо для JSONP работать. Ознакомьтесь с обновленным URL-адресом, чтобы узнать, что я имею в виду: http://twitter.com/users/usejquery.json?callback=functionName