Estoy tratando de hacer una solicitud POST entre dominios y me he topado con un muro (o dos).

No puedo poner una página proxy en el servidor, por lo que no es una opción.

He investigado getJSON, que funciona muy bien, excepto que necesito PUBLICAR y NO OBTENER.

¿Es posible hacer esto? Si es no , ¿alguien puede explicarme cómo funciona getJSON y por qué no puedo hacer una alternativa POST?

5
Mr. Flibble 16 oct. 2009 a las 05:38

3 respuestas

La mejor respuesta

NO PUEDE realizar una solicitud de dominio cruzado (GET / POST / etc.) con un XMLHttpRequest (también conocido como AJAX).

Lo que puede hacer, cuando el servidor lo admite, es realizar una solicitud JSONP. Una solicitud JSONP funciona de la siguiente manera:

  • jQuery crea una función accesible globalmente a partir de la función de devolución de llamada que proporciona como argumento
  • En lugar de utilizar XMLHttpRequest (AJAX) para realizar la solicitud HTTP, jQuery inserta dinámicamente una etiqueta SCRIPT en el DOM
  • El SRC de la etiqueta de script es la URL de solicitud con la que está intentando comunicarse
  • jQuery agrega un parámetro de devolución de llamada a la cadena de consulta de la siguiente manera: example.com/someurl.js?callback=someDynamicallyGeneratedMethodName
  • Luego le corresponde al SERVIDOR devolver JavaScript que su cliente puede usar pasando el resultado JSON como argumento a someDynamicallyGeneratedMethodName

Si no tienes control del servidor en el que estás publicando, entonces no tienes suerte, JSONP no te hará mucho bien. Lo que devuelva el servidor estará en una etiqueta SCRIPT, y probablemente arrojará un error si no está formateado correctamente.

Para obtener más información sobre esto, le sugiero que mire la función base $ .ajax en lugar de los accesos directos. (En la documentación de jQuery en Ajax. Lo siento, no puedo publicar más enlaces)

Nuevamente, si no tiene control del servidor en el que está publicando, es posible que desee buscar un proxy si es posible. De lo contrario, un IFRAME puede ser su única otra opción. También hay un método para lograr esto con un objeto SWF (flash). No lo he intentado, pero son soluciones a las limitaciones del objeto XMLHttpRequest.

¡Espero poder ayudar!

26
Stephen Delano 16 oct. 2009 a las 18:09

Si desea hacer POST Cross Domain, entonces la solución más fácil es la que se proporciona aquí por Matteo Funciono muy bien para mi

0
Community 23 may. 2017 a las 10:27

Puede hacer una publicación, pero lo que desea es una solicitud JSONP para solucionar los problemas de dominio cruzado. Básicamente, proporciona una función de devolución de llamada y la solicitud vuelve como contenido del script y su devolución de llamada se llama con los datos JSON de la solicitud. El script del lado del servidor deberá proporcionar los datos de vuelta como una llamada de función utilizando la función de devolución de llamada envuelta alrededor del objeto JSON.

Consulte la documentación sobre la función post.

$.post( '/example.com/controller/action?callback=?',
        { param: "data" }, 
        function(data) {
             ...do something with the data...
        }, 'jsonp' );

Acción ASP.NET MVC para esto:

[AcceptVerbs( HttpVerbs.Post )]
public ActionResult Action( string param, string callback )
{
     var jsonData = ...do something and construct some data in JSON...

     return Content( callback + "(" + jsonData + ");" );
}
2
tvanfosson 16 oct. 2009 a las 02:06