JQuery JSONP跨域调用没有做任何事情

时间:2010-10-08 02:26:34

标签: jquery jsonp

每当我通过jquery对我设置的任何页面(本地或我的服务器)进行JSONP调用时,我得到的就是静默处理。 Firebug报告200 OK,响应看起来不错。我设置警报框以在成功或弹出时弹出 失败,但都没有出现。我使用什么网址似乎并不重要,没有任何东西弹出。

但如果我使用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标题,然后是从twitter复制的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 个答案:

答案 0 :(得分:10)

你遇到了问题,因为这不是响应实际上看起来的样子:)

当您指定jsonpcallback=?时,它会被替换,它实际上正在执行:?callback=functioName,这会使您的响应变为这样:

{"test_param":12345}

对此:

functionName({"test_param":12345});

JSONP需要才能工作。查看更新后的网址,了解我的意思:http://twitter.com/users/usejquery.json?callback=functionName

答案 1 :(得分:1)

睡了一夜好后我已经解决了这个问题。我没有意识到这两种响应格式之间存在差异。当我使用我的浏览器查询推特时,响应中没有包含使我困惑的功能名称。

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