2010-01-13 17 views
14

Pregunta:¿Solicitud JSON entre dominios?

Estoy tratando de utilizar dominios JSON al otro lado, pero todo lo que encuentro es analizadores JSON, que no necesito ...
He leído que es posible hacer varios dominios Las solicitudes con JSON, pero hasta ahora, todo lo que veo es implementaciones que utilizan XMLHttpRequest ...
- lo que significa que no puede utilizar las peticiones de varios dominios, al menos no en el exterior IE 8 ...
tengo estado en http://www.json.org/, pero todo lo que encuentro es analizador o inútil.

El mejor que he encontrado en Google hasta ahora es
http://devpro.it/JSON/files/JSONRequest-js.html
pero esto es más bien un desastre, no funciona dominios, e intra-dominio ni - o más bien no del todo ...

var the_object = {}; 
var http_request = new XMLHttpRequest(); 
http_request.open("GET", url, true); 
http_request.onreadystatechange = function() { 
    if (http_request.readyState == 4 && http_request.status == 200) { 
      the_object = JSON.parse(http_request.responseText); 
     } 
}; 
http_request.send(null); 
+0

si usa "http_request.responseXML", se convertirá en nulo si su respuesta del servidor no es XML. – dinesh707

Respuesta

14

lo que puede hacer entre dominios es inyectar un script son:

var s = document.createElement('script'); 
s.src = 'http://someotherdomain/getMeMyJs.aspx?parameter=value'; 
s.onload = someOptionalCallback; 
s.type = 'text/javascript'; 

if(document.getElementsByTagName('head').length > 0) 
    document.getElementsByTagName('head')[0].appendChild(s); 

Ahora, el código devuelto por esa petición será Execut ed de inmediato. Si usted desea para que al interactuar con su código, puede asegurarse de que está siendo devuelto con todos los datos envueltos en una función llamada:

jsonCallback({ object: json, whatever: value }); 

puede utilizar este último para construir API, donde se pasa el nombre de una función de devolución de llamada como parámetro de consulta de consulta. Here's an example of such an API

+5

Esto se conoce generalmente como JSONP (JSON con relleno). Consulte http://en.wikipedia.org/wiki/JSONP#JSONP –

+0

Debe intentar esto: s.src = 'http://google.com/complete/search?q=' + document.getElementById ('txtSynonym ') .value +' y callback = GoogleSuggest '; –

13

JSON es solo un método de serialización. No existe relación alguna entre el método de la serialización y la cuestión de si el navegador intentará o no impedir el acceso a los datos entre los dominios. (Esto explica por qué solo está buscando analizadores: no hay nada para JSON, excepto la codificación y la decodificación).

XMLHTTPRequest se acaba de llamar XML HTTPRequest. Realmente no tiene nada que ver con XML. Se puede usar para enviar datos de texto, datos codificados en JSON o cualquier otro método de serialización.

Existen varios métodos para acceder al dominio cruzado de datos. uno descrito en la respuesta de David Hedlund. Otros se pueden encontrar en respuestas a preguntas similares (ver here y here).

Cuestiones relacionadas