2012-03-27 12 views
6
jQuery.ajax({ 
      type: "GET", 
      url: 'http://example.com/restaurant/VeryLogin(username,password)', 
      dataType: "json", 

      success: function (data) { 
       alert(data); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       alert("error"); 
      } 
     }); 

alerta de éxito, pero los datos eran nulos. La URL devuelve datos xml, si especificamos el tipo de datos podemos obtener los datos json, pero aquí no obtuvo ningún dato.cómo llamar api web multidominio utilizando ajax?

Cualquier ayuda apreciada.

Respuesta

9

Javascript está sujeto a la misma política de dominio. Esto significa que para la seguridad, un script JS en un navegador cliente solo puede acceder al mismo dominio del que proviene.

JSONP no está sujeto a las mismas restricciones.

Compruebe la documentación de jQuery en JSONP aquí:

http://api.jquery.com/jQuery.getJSON/

Aquí es un ejemplo práctico de usar JSONP acceder a un servicio de dominios cruzados a través de jQuery AJAX:

http://jsbin.com/idasay/4

Y solo en caso de que JSBIN elimine esta pega en el futuro:

jQuery.ajax({ 
    type: "GET", 
    url: 'http://api.geonames.org/postalCodeLookupJSON?postalcode=6600&country=AT&username=demo', 
    dataType: "jsonp", 
    cache: false, 
    crossDomain: true, 
    processData: true, 


    success: function (data) { 
     alert(JSON.stringify(data)); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("error"); 
    } 
}); 
+0

ya he seguido el enlace, pero no produjo el resultado. – tiru

+0

Desde el enlace publicado anteriormente: "Debido a restricciones de seguridad del navegador, la mayoría de las solicitudes" Ajax "están sujetas a la misma política de origen; la solicitud no puede recuperar datos de un dominio, subdominio o protocolo diferente. Peticiones de script y JSONP no están sujetos a las mismas restricciones de política de origen ". –

+0

Aconsejaría buscar cómo lograr lo que necesita usando el ejemplo JSONP en el enlace de arriba. –

0

Busque el tipo de datos jsonp.

jQuery.ajax({ 
     type: "GET", 
     url: 'http://xxx.com/restaurant/VeryLogin(username,password)', 
     dataType: "jsonp", 
    cache: false, 
     crossDomain: true, 
    processData: true, 

     success: function (data) { 
      alert(data); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert("error"); 
     } 
    }); 
+0

seguí tus cambios tuerca sin resultado todavía. – tiru

+0

Debe leer sobre jsonp. Sin embargo, la página a la que llama no devuelve datos jsonp. –

2

Es imposible utilizar Ajax para obtener datos de varios dominios directamente sin cambiar de servidor. Se llama Same origin policy.

Puede establecer el encabezado especial Access-Control-Allow-Origin en el back-end (how do to this). O puede usar JSONP] (http://en.wikipedia.org/wiki/JSONP).

Cuestiones relacionadas