每当我通过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});
答案 0 :(得分:10)
你遇到了问题,因为这不是响应实际上看起来的样子:)
当您指定jsonp
或callback=?
时,它会被替换,它实际上正在执行:?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});