2011-09-25 9 views
6

Estoy usando $ .ajax de jQuery para realizar una solicitud a un servidor de terceros, usando JSONP. Especifico el método POST, pero de todos modos utiliza GET:jQuery: obtener JSON mediante ajax, pero con POST en lugar de GET

$.ajax({ 
     type: "POST", 
     dataType: "json", 
     url: other_server + "/run?callback=?", 
     data: { 
      code: $(code).val() 
     }, 
     success: function(obj) { 
      var res = obj.results; 
      $(results).val(res); 
     } 
    }); 

Buscando en la fuente jQuery, veo estas dos líneas que parecen obligar a todas las solicitudes entre dominios de conseguir, pero no entiendo por qué necesita serlo:

if (s.crossDomain) { 
    s.type = "GET"; 

¿Es posible hacer esto con un POST en lugar de un GET? ¿Por qué jQuery fuerza el uso de GET?

Respuesta

5

JSON-P funciona insertando un elemento <script> en el documento, por lo tanto, solo puede realizar solicitudes GET.

Si desea realizar una solicitud POST a un servidor remoto, entonces necesita mirar XHR en su lugar y configurar los permisos CORS. Tenga en cuenta que esto tiene limited browser support.

Como alternativa, mantenga sus solicitudes en el mismo origen (y pida a su servidor que realice la solicitud al servidor remoto).

+0

+1 para sugerencia de servidor proxy. –

+0

¡Gracias, eso tiene mucho sentido! –