Ich muss eine getJSON()
Anfrage stellen, aber wie übergebe ich Autorisierungen und benutzerdefinierte Header?
Ich erhalte Probleme, dass der Anforderungsheader den Namen, aber NICHT die Werte annimmt. Die URL wird durch eine manuelle Anforderung in Fiddler angezeigt, als Optionen anstelle von GET / Url eingefügt zu werden.
Hier ist ein Beispiel dafür, was wir versuchen, was bei Geigern gut funktioniert. Wie kann ich dies mit der AJAX-Funktion replizieren?
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-Code:
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 Normal Request Headers:
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
Fiddler Through Ajax()
Request Headers:
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
Antworten:
Ich stimme Sunetos zu, dass Sie die $ .ajax-Funktion verwenden müssen, um Anforderungsheader zu übergeben. Dazu müssen Sie eine Funktion für den beforeSend-Ereignishandler schreiben, die eine der Optionen $ .ajax () ist. Hier ist ein kurzes Beispiel dafür:
<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>
Wenn Sie den obigen Code ausführen und den Datenverkehr in einem Tool wie Fiddler beobachten, werden zwei Anforderungsheader angezeigt:
Die setHeader-Funktion könnte auch in den $ .ajax-Optionen inline sein, aber ich wollte sie aufrufen.
Hoffe das hilft!
quelle
Ich denke, Sie könnten die Header setzen und trotzdem getJSON () wie folgt verwenden:
$.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"); });
quelle
Die
$.getJSON()
Methode ist eine Kurzform, mit der Sie solche erweiterten Optionen nicht angeben können. Dazu müssen Sie die vollständige$.ajax()
Methode verwenden.Hinweis in der Dokumentation unter http://api.jquery.com/jQuery.getJSON/ :
$.ajax({ url: url, dataType: 'json', data: data, success: callback });
Verwenden
$.ajax()
Sie also einfach alle zusätzlichen Parameter, die Sie benötigen, und geben Sie sie an.quelle