Cómo componer una llamada JSON / Ajax entre dominios a un servicio web simple

Tengo un servicio web con este formulario:

http://<remote_domain_ip>/api/v1/search/?query=the_query

Lo que da como resultado un documento JSON en respuesta.

¿Cómo creo / redacto una llamada JQuery JSON / ajax para poder recuperar la respuesta?

La respuesta está en forma:

{
"status_code":200,
"status_txt":"OK",
"field1":"abc",
"field2":"some_text"
}

preguntado el 08 de noviembre de 11 a las 17:11

2 Respuestas

Eso depende. Si dices en el dominio a.com y su servicio web también está ubicado en el mismo lugar, entonces simplemente puede hacerlo de esta manera:

$.ajax('path-to-your-service/WebMethodName', data, function(r){
    // Success callback, you have your answer in r.d object
}, function(e){
    // Error callback
});

Sin embargo, si estás en decir b.com y el servicio web se encuentra en a.com, entonces estás limitado por un concepto llamado Política del mismo dominio. En otras palabras, no puede usar llamadas AJAX (o XMLHttpRequest) para obtener datos de ese servicio web, a menos que siga ciertas reglas. Uno es usar Acceso-Control-Permitir-Origen Campo de encabezado HTTP, que tiene algunos problemas entre navegadores. Otra forma podría ser usar JSONP, que requiere que el servidor lo admita.

Para usar JSONP, debe usar jQuery's $.getJSON() y proporcione una clave de cadena de consulta de devolución de llamada junto con sus parámetros enviados a través de HTTP GET.

$.getJSON('path-to-your-service?x=some&y=thing?callback?', function(r){
    // Success callback. Your JSON object would be the r parameter
});

Te recomiendo que uses JSONP, si eres el creador del servicio web, y si usas .NET framework, también te recomiendo que simplemente uses un Manejador genérico en lugar de un servicio web, ya que tuvimos muchos problemas para configurar el servicio web. Sin embargo, en el código de su servidor, debe verificar la solicitud GET entrante para una clave de cadena de consulta llamada llamar de vuelta, y si existe, debe envolver su JSON devuelto dentro de una función de esta manera:

callback({
   a: a1,
   b: b1,
   c: c1
});

Comprender JSONP (el concepto y la forma en que ocurre) es muy importante. Sin un conocimiento profundo, su futuro mantenimiento sería una gran carga. Sugiero leer este pregunta.

contestado el 23 de mayo de 17 a las 15:05

No puede, asumiendo que no es el mismo dominio en el que está. Si tiene acceso a remote_domain_ip, o puede hacer que alojen un archivo por usted, puede usar EasyXDM. Existen herramientas alternativas similares que involucran Flash que puede probar. De lo contrario, deberá realizar la solicitud en el back-end.

respondido 08 nov., 11:21

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.