代码之家  ›  专栏  ›  技术社区  ›  Coderer

JQuery的getJSON()没有正确设置Accept头?

  •  10
  • Coderer  · 技术社区  · 14 年前

    看起来人们在过去有过接受头的问题,但我不确定我的问题是否相关。使用jquery1.4.2,我在获取JSON时遇到了问题 getJSON() /

    埃塔:这个请求是跨站点的,如果有关系的话,但我会通过一个 callback=? 查询参数,因此JQuery是(成功!)将其视为JSONP。在这种情况下,我调用的服务支持accept override查询参数( &accept=application/json ),所以我让它手动工作,但我仍然认为头螺丝是奇怪的,并希望我能够修复它,所以我不会再次遇到这种情况时,处理不同的服务,可能不是那么宽容。我没有从开发环境中复制/粘贴代码的简单方法,但要点如下:

    $.getJSON(baseURL + "?item=" + itemNum + "&callback=?", function(data){
      console.log(data);
    }
    

    如你所见,这并不复杂 应该 (我99%确定…)导致XHR被发送,接受头为 application/json . 就像我说的,这是不会发生的,每个萤火虫的网络控制台。如果有关系的话,这是在Firefox3.6.8中。

    埃塔:对于任何还在读这篇文章的人来说,是的,它还在发生,不,我不知道为什么。就像我说的,简单的getJSON()调用,非常基本的语法,跨站点,被视为JSONP,因为它包含一个回调查询参数。仍然可以接受建议!

    3 回复  |  直到 14 年前
        1
  •  13
  •   Peter Tate    13 年前

    由于您的呼叫是跨域的,您的浏览器将不允许您进行XHR呼叫(同源策略)。在内部,jQuery使用 <script> taghack”,进行跨域调用(这是 JSONP 数据类型)。由于调用是使用标记进行的,jQuery根本不可能修改 accepts 收割台的一部分。

    jQuery通过对您隐藏这些细节来发挥其魔力,但不幸的是,在这种情况下,您似乎受到 Law of Leaky Abstractions .

        2
  •  2
  •   Fosco    14 年前

    $.ajax({
      url: '/what.eva',
      dataType: 'json',
      data: '{}',
      success: callbackFunc
    });
    
    function callbackFunc(result) {
       alert(result);
    } 
    
        3
  •  2
  •   Timothy Strimple    14 年前

    这是一个已经在jquery网站上关闭的bug。

    http://dev.jquery.it/ticket/6551

    似乎还没有解决这个问题的方法。