2010-01-29 12 views
8

Estoy jugando con jQuery y probando algo que debería ser simple, pero simplemente no funciona.XMLHttpRequest xml response woes with jQuery 1.4.1, ¿cómo forzar que la respuesta de solicitud se procese como texto sin formato?

$(document).ready(function(){ 
$.ajax({ 
    url : 'http://soiduplaan.tallinn.ee/', 
    data : {a : 'p.routes', transport_id : 'tram', t : 'xml', l : 'ee'}, 
    error : function(xhr, stat){ 
    alert('error'); 
    }, 
    success : function(data){ 
    alert('success'); 
    alert(data); 
    } 
}); 
}); 

El fragmento se encuentra en un archivo Test.js e incluidos en un fichero test.html que se abre en Firefox (3.6) como file: /// C: /test.html y Altough 'éxito' se muestra los datos está vacío y a través de Firebug la respuesta para las pantallas de XML:

X`ML Parsing Error: no element found Location: moz-nullprincipal:{5ac44e50-2cb6-45d1-9cfe-0b999850ecdb} Line Number 1, Column 1:` 

Alternativamente I probado que la adición de

dataType : "text" 

no tiene ningún efecto, el resultado sigue siendo procesada como XML (probablemente debido a que la respuesta tiene contenido- tipo: texto/xml; charset = UTF-8).

soy capaz de ver los resultados de respuesta a través de Firebug si fijo

dataType : "script" 

pero entonces ya que no es en realidad un guión válido js simplemente falla, Firebug muestra:

invalid regular expression flag t 
<?xml version="1.0" encoding="UTF-8"?>..._days><types><type routes="85" city="t 

Se pone "mejor", si la solicitud anterior en el navegador y a través de "Ver código fuente" copia el xml para ser validado aquí http://www.w3schools.com/Dom/dom_validate.asp muestra "no se encontraron errores" entonces ¿por qué no funciona a través de xmlhttprequest?

¿Qué estoy haciendo mal?

¿Sería posible forzar de algún modo que la respuesta de xmlhttprequest se procese como text/plain?

ancho, iges

P. S. He cansado del tipo de datos sugerido: opción "html" (se me olvidó mencionar inicialmente), pero el "html" tampoco funciona y en Firebug puedo ver el mismo error sobre el análisis/moz-nullprincipal.

También el servicio que proporciona los datos XML es controlado por un tercero al que no tienen acceso, hay una manera de hacer esto o voy a tener que besar a mi idea de despedida :(

Respuesta

5

¿Está ejecutando este código del mismo dominio? (http://soiduplaan.tallinn.ee)

Debido a que no se le permite utilizar la llamadas Ajax para obtener los datos de otros dominios ... (a menos que use el JSONP o tipos de datos de secuencias de comandos ..)

Cuando los datos se recupera de servidores remotos (que solo es posible utilizando el script o los tipos de datos jsonp), ...

alternativa Tha sería tener jQuery solicitud de un archivo local que recibiría el lado del servidor de datos y su servicio a la petición ajax ..

por ejemplo
php: http_post_data
asp: Microsoft.XMLHTTP

+0

agregado de solución y ejemplos de enlaces .. –

-1

Doh'

trató consulta YQL sólo para descubrir que robots.txt está bloqueando :(

0

Esto debería hacer el truco:

$(document).ready(function(){ 

$('#test').click(function() { 
    $.ajax({ 
    url : 'http://soiduplaan.tallinn.ee/', 
    dataType : 'xml', 
    data : {a : 'p.routes', transport_id : 'tram', t : 'xml', l : 'ee'}, 
    error : function(xhr, stat){ 
    alert('error'); 
    }, 
    success : function(data){ 
    alert('success'); 
    $('#foo').html(data); // could also use text(data) to see XML returned as text 
    } 
    }); 
    }); 
}); 

Asumiendo que tiene un archivo HTML como:

<body> 
<div> 
<h1> Tester</h1> 
</div> 
<br /> 
    <input type="button" id="test" value="Test" /> 
    <div id="foo"> 
    </div> 
</body> 

NOTA: Esto parece funcionar bien en IE8, pero no tanto en FF3.6

1

Se llama same origin policy. No puede usar las llamadas Ajax para obtener datos de otros dominios a menos que esté utilizando los tipos de datos jsonp o script.

Cuestiones relacionadas