如何使用jQuery'传递请求头;s getJSON()方法?

如何使用jQuery'传递请求头;s getJSON()方法?,jquery,getjson,Jquery,Getjson,我需要执行getJSON()请求,但如何传递授权和自定义头 我遇到的问题是,请求头使用的是名称,而不是值。该URL通过fiddler中的手动请求显示,以作为选项而不是GET/URL插入 这里是一个例子,我们正在努力做的工作,在小提琴家工作良好;如何使用AJAX函数复制此功能 GET/Service.svc/logins/gdd535342/houses/vxcbdfsdg/people/dsgsdggd?format=json HTTP/1.1 用户代理:Fiddler 授权:基本rgbg423

我需要执行
getJSON()
请求,但如何传递授权和自定义头

我遇到的问题是,请求头使用的是名称,而不是值。该URL通过fiddler中的手动请求显示,以作为选项而不是GET/URL插入

这里是一个例子,我们正在努力做的工作,在小提琴家工作良好;如何使用AJAX函数复制此功能

GET/Service.svc/logins/gdd535342/houses/vxcbdfsdg/people/dsgsdggd?format=json HTTP/1.1
用户代理:Fiddler
授权:基本rgbg423535fa23y4436
X-PartnerKey:df3fgeg-g5g6-b55b-f3d2-DSGG3523
主持人:154.34.53.54:2757
JavaScript代码:

xhr = new XMLHttpRequest();

$(document).ready(function() {
  $.ajax({
    url: 'http://localhost:437/service.svc/logins/jeffrey/house/fas6347/devices?format=json',
    type: 'GET',
    datatype: 'json',
    success: function() { alert("Success"); },
    error: function() { alert('Failed!'); },
    beforeSend: setHeader       
  });   
});

function setHeader(xhr) {
  xhr.setRequestHeader('Authorization', 'Basic faskd52352rwfsdfs');
  xhr.setRequestHeader('X-PartnerKey', '3252352-sdgds-sdgd-dsgs-sgs332fs3f');
}
Fiddler普通请求头:

GET/service.svc/logins/jeffrey/house/fas6347/devices?format=json HTTP/1.1
用户代理:Fiddler
授权:基本faskd52352rwfsdfs
X-PartnerKey:3252352-sdgds-sdgd-dsgs-sgs332fs3f
主机:localhost:437
Fiddler通过
Ajax()
请求头:

OPTIONS service.svc/logins/jeffrey/house/fas6347/devices?format=json HTTP/1.1
主机:localhost:437
用户代理:Mozilla/5.0(Windows;U;Windows NT 6.1;en-US;rv:1.9.2.6)Gecko/20100625 Firefox/3.6.6
接受:text/html、application/xhtml+xml、application/xml;q=0.9,*/*;q=0.8
接受语言:en-us,en;q=0.5
接受编码:gzip,deflate
接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.7
活命:115
代理连接:保持活动状态
来源:http://ipv4.fiddler:61975
访问控制请求方法:GET
访问控制请求头:授权,x-partnerkey
$.getJSON()
方法是一种简写方法,不允许您指定类似的高级选项。为此,需要使用完整的
$.ajax()
方法

文件中的通知如下:

这是一个速记Ajax函数,相当于:


因此,只需使用
$.ajax()
并提供所需的所有额外参数。

我同意sunetos的观点,您必须使用$.ajax函数才能传递请求头。为此,必须为beforeSend事件处理程序编写一个函数,它是$.ajax()选项之一。下面是一个关于如何做到这一点的快速示例:

<html>
  <head>
    <script src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function() {
        $.ajax({
          url: 'service.svc/Request',
          type: 'GET',
          dataType: 'json',
          success: function() { alert('hello!'); },
          error: function() { alert('boo!'); },
          beforeSend: setHeader
        });
      });

      function setHeader(xhr) {
        xhr.setRequestHeader('securityCode', 'Foo');
        xhr.setRequestHeader('passkey', 'Bar');
      }
    </script>
  </head>
  <body>
    <h1>Some Text</h1>
  </body>
</html>

$(文档).ready(函数(){
$.ajax({
url:'service.svc/Request',
键入:“GET”,
数据类型:“json”,
成功:函数(){alert('hello!');},
错误:函数(){alert('boo!');},
发送前:setHeader
});
});
函数setHeader(xhr){
setRequestHeader('securityCode','Foo');
setRequestHeader('passkey','Bar');
}
一些文本
如果您运行上面的代码并在Fiddler之类的工具中观察流量,您将看到传入的两个请求头:

  • 值为Foo的securityCode
  • 值为Bar的密钥
setHeader函数也可以内嵌在$.ajax选项中,但我想调用它


希望这有帮助

我认为您可以设置标题,并且仍然像这样使用getJSON():

$.ajaxSetup({
  headers : {
    'Authorization' : 'Basic faskd52352rwfsdfs',
    'X-PartnerKey' : '3252352-sdgds-sdgd-dsgs-sgs332fs3f'
  }
});
$.getJSON('http://localhost:437/service.svc/logins/jeffrey/house/fas6347/devices?format=json', function(json) { alert("Success"); }); 

如果您是为JSONP服务执行此操作,则无法设置额外的标题。请检查对原始帖子所做的更改(新问题),我不确定是否理解此问题。标题键/值不应作为URL的一部分,而应作为选项(如您所说)传递给服务。您可以按照示例设置“securityCode”和“passkey”的方式设置X-PartnerKey和授权(这只是我编写的标题)。在进行$.ajax调用时,应该设置主机和用户代理。对不起,如果我没有正确理解这个问题。如果你有源代码,请发布,也许这会有所帮助。谢谢我已经按照与示例相同的方式设置了请求头,但是在运行此程序并通过fiddler查看它之后,会显示头的名称,但不会显示值。同样在fiddler中,我尝试执行一个GET,它将显示为GET/URL,但如果我将类型设置为GET,它将显示为OPTIONS/URL。希望这更有意义。我将发布源代码,但实际上与您的相同。再次感谢。这与IE和firefox兼容吗?现在你可以在
headers
属性中定义你的头。从文档():“不建议使用它。”@matt burns,true。我的解决方案将使每个jQueryAjax请求的头中都包含这两个值。我认为在这种情况下它是无害的。如果使用ajaxSetup()设置url或请求类型,则可能会遇到问题。我会劝阻的。需要注意的是,在我的例子中,所有getJSON调用实际上都必须使用相同的头,所以这对我来说是一个很好的解决方案:)
$.ajaxSetup({
  headers : {
    'Authorization' : 'Basic faskd52352rwfsdfs',
    'X-PartnerKey' : '3252352-sdgds-sdgd-dsgs-sgs332fs3f'
  }
});
$.getJSON('http://localhost:437/service.svc/logins/jeffrey/house/fas6347/devices?format=json', function(json) { alert("Success"); });