【问题标题】:JQuery JSONP cross domain call not doing anythingJQuery JSONP跨域调用不做任何事情
【发布时间】:2011-04-22 16:25:56
【问题描述】:

每当我通过 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});

【问题讨论】:

    标签: jquery jsonp


    【解决方案1】:

    您遇到问题是因为响应的实际外观并非如此 :)

    当您指定 jsonpcallback=? 时,它会被替换,实际上是在做:?callback=functioName,这会将您的回复变成这样:

    {"test_param":12345}
    

    到这里:

    functionName({"test_param":12345});
    

    这是 JSONP 工作所需要的。查看更新后的 URL 以了解我的意思:http://twitter.com/users/usejquery.json?callback=functionName

    【讨论】:

      【解决方案2】:

      好的,经过一夜好眠,我已经解决了这个问题。我没有意识到这是两种响应格式之间的区别。当我仅使用浏览器查询 twitter 时,响应中没有包含让我感到困惑的函数名称。

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

      【讨论】:

      • 作为提示,您应该接受答案(如上面的答案,对问题的相同描述和修复),而不是再次发布相同的内容。
      猜你喜欢
      • 2023-04-08
      • 2013-07-28
      • 2013-04-04
      • 2012-01-11
      • 2013-10-23
      • 1970-01-01
      • 2012-05-28
      • 2013-01-04
      • 1970-01-01
      相关资源
      最近更新 更多