我怎样才能传递请求头与jQuery的getJSON()方法?
我需要做一个getJSON()
请求,但我如何通过授权和自定义标题?
我得到的问题,请求标题采取名称,但不是值。 该URL通过手动请求在小提琴手中显示,作为选项插入而不是GET / Url。
这里是我们正在尝试做的一个例子,在小提琴手中工作正常。 我怎样才能复制这与AJAXfunction?
GET /Service.svc/logins/gdd53535342/houses/vxcbdfsdg/people/dsgsdggd?format=json HTTP/1.1 User-Agent: Fiddler Authorization: Basic rgbg423535fa23y4436 X-PartnerKey: df3fgeg-g5g6-b55b-f3d2-dsgg353523 Host: 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'); }
提琴手正常请求头:
GET /service.svc/logins/jeffrey/house/fas6347/devices?format=json HTTP/1.1 User-Agent: Fiddler Authorization: Basic faskd52352rwfsdfs X-PartnerKey: 3252352-sdgds-sdgd-dsgs-sgs332fs3f Host: localhost:437
通过Ajax()
请求标题的提琴手:
OPTIONS service.svc/logins/jeffrey/house/fas6347/devices?format=json HTTP/1.1 Host: localhost:437 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Proxy-Connection: keep-alive Origin: http://ipv4.fiddler:61975 Access-Control-Request-Method: GET Access-Control-Request-Headers: authorization,x-partnerkey
我同意sunetos,你将不得不使用$ .ajax函数来传递请求标头。 为了做到这一点,你必须为beforeSend事件处理函数编写一个函数,这是$ .ajax()选项之一。 这里有一个关于如何做到这一点的快速示例:
<html> <head> <script src="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>
如果你运行上面的代码,并观看像Fiddler这样的工具的stream量,你会看到两个请求头传入:
- 具有值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"); });
$ .getJSON()方法是简写,不能让你指定高级选项。 要做到这一点,你需要使用完整的$ .ajax()方法。 请注意http://api.jquery.com/jQuery.getJSON/上的文档,“这是一个简写的Ajax函数,相当于:”;
$.ajax({ url: url, dataType: 'json', data: data, success: callback });
所以只需使用$ .ajax()并提供所有您需要的额外参数。