2011-08-17 26 views
28

He heredado algún código que eventualmente formará parte de una llamada de API. Según el código existente, la llamada es una publicación para recuperar el código JSON con access_token. Si bien esto normalmente sería simple y como cualquier otra API, este código requiere que haya un campo httpheader personalizado para el secreto del cliente.Publicación de JSON con HTTPHeader personalizado Campo

Pude hacer que esto funcionara en Objective C con URLRequest, etc. pero ahora que estoy creando la llamada para un componente web, me han bloqueado.

estoy usando un poste de jQuery bastante estándar

 $.post('https://url.com', 
     {access_token:'XXXXXXXXXXXXXXXXXXX', 
     function(data){ 
      console.info(data); 
     }, 'json'); 

Con un http-equiv en la cabecera. Pero la publicación nunca recupera datos y el servidor en sí no reconoce que se realizó ninguna llamada (incluso una incompleta).

Es posible que tenga que eliminar este código y empezar de nuevo, pero si alguien ha tenido este problema antes, por favor ofrezca alguna información.

Respuesta

95

Lo que ha publicado tiene un error de sintaxis, pero no importa ya que no puede pasar los encabezados HTTP a través del $.post().

Siempre que tenga la versión jQuery> = 1.5, cambie a $.ajax() y pase la opción headers (docs). (Si se encuentra en una versión anterior de jQuery, te voy a mostrar cómo hacerlo a través de la opción beforeSend.)

$.ajax({ 
    url: 'https://url.com', 
    type: 'post', 
    data: { 
     access_token: 'XXXXXXXXXXXXXXXXXXX' 
    }, 
    headers: { 
     Header_Name_One: 'Header Value One', //If your header name has spaces or any other char not appropriate 
     "Header Name Two": 'Header Value Two' //for object property name, use quoted notation shown in second 
    }, 
    dataType: 'json', 
    success: function (data) { 
     console.info(data); 
    } 
}); 
+0

¡Muchas gracias! Me salvaste horas de frustración. Ahora, el objeto está siendo arrastrado en Safari, pero no en Firefox o Chrome. ¿Es este un problema conocido y relacionado? Si es así, me encantaría su visión. Si no, lo resolveré. – Izzy

+0

Al usar Chrome y Firefox, ¿qué ves (a través de Developer Tools o Firebug) que se envía al servidor, y qué ves devuelto? ¿Qué depuración tienes en el servidor para ver si la solicitud es correcta y adecuada? – JAAulde

+0

No aparecen errores en Firebug, pero no hay devolución. En Firefox Web Console veo esto: 'OPCIONES https: // [url.com] [HTTP/1.1 200 OK 441ms]' y en las herramientas de desarrollo de Chrome Veo esto: XMLHttpRequest no puede cargar 'https://url.com. Origin null no está permitido por Access-Control-Allow-Origin. ' El servidor muestra que entró una solicitud. Si la solicitud fue incorrecta, registraría un mensaje de error. – Izzy

0

traté como usted ha mencionado, pero sólo primer parámetro está pasando y descansar todos son que aparece en el servidor como undefined. Estoy pasando JSONWebToken como parte del encabezado.

.ajax({ 
    url: 'api/outletadd', 
    type: 'post', 
    data: { outletname:outletname , addressA:addressA , addressB:addressB, city:city , postcode:postcode , state:state , country:country , menuid:menuid }, 
    headers: { 
     authorization: storedJWT 
    }, 
    dataType: 'json', 
    success: function (data){ 
     alert("Outlet Created"); 
    }, 
    error: function (data){ 
     alert("Outlet Creation Failed, please try again.");   
    } 

    }); 
5

si uno quiere usar .post() continuación Esto establecerá las cabeceras de todos los futuros petición hecha con jQuery

$.ajaxSetup({ 
    headers: { 
     'Content-Type': 'application/json', 
     'Accept': 'application/json' 
    } 
}); 

luego hacer su .post() llama de forma normal.

Cuestiones relacionadas