Necesito hacer una getJSON()
solicitud, pero ¿cómo paso la autorización y los encabezados personalizados?
Tengo problemas de que el encabezado de la solicitud está tomando el nombre, pero NO los valores. La URL se muestra a través de una solicitud manual en Fiddler para que se inserte como opciones en lugar de GET / Url.
Aquí hay un ejemplo de lo que estamos tratando de hacer que funciona bien en Fiddler; ¿Cómo puedo replicar esto con la función AJAX?
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
Código 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');
}
Encabezados de solicitud normales de Fiddler:
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 a través de Ajax()
encabezados de solicitud:
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
Respuestas:
Estoy de acuerdo con sunetos en que tendrás que usar la función $ .ajax para pasar los encabezados de solicitud. Para hacer eso, tendrá que escribir una función para el controlador de eventos beforeSend, que es una de las opciones $ .ajax (). Aquí hay una muestra rápida de cómo hacerlo:
<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>
Si ejecuta el código anterior y observa el tráfico en una herramienta como Fiddler, verá dos encabezados de solicitud pasados:
La función setHeader también podría estar en línea en las opciones $ .ajax, pero quería llamarla.
¡Espero que esto ayude!
fuente
Creo que podría configurar los encabezados y aún usar getJSON () así:
$.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"); });
fuente
El
$.getJSON()
método es una abreviatura que no le permite especificar opciones avanzadas como esa. Para hacer eso, necesita usar el$.ajax()
método completo .Aviso en la documentación en http://api.jquery.com/jQuery.getJSON/ :
$.ajax({ url: url, dataType: 'json', data: data, success: callback });
Así que utilice
$.ajax()
y proporcione todos los parámetros adicionales que necesite.fuente