2010-01-29 9 views
8

Po prostu bawię się z jQuery i próbuję czegoś, co powinno być proste, ale po prostu nie działa.XMLHttpRequest błędy xml odpowiedzi z jQuery 1.4.1, jak zmusić odpowiedź żądania do przetworzenia jako zwykły tekst?

$(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); 
    } 
}); 
}); 

Fragment w pliku test.js i zawarte w pliku test.html, który jest otwarty w Firefox (3.6), takie jak plik: /// C: /test.html i Mimo, „sukcesu” jest przedstawione dane są puste i przez Firebug odpowiedź na wyświetlaczach XML:

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

Alternatywnie próbowałem że dodanie

dataType : "text" 

nie ma żadnego wpływu, wynik jest nadal przetwarzany jako XML (prawdopodobnie dlatego, że odpowiedź ma zadowolony- typ: text/xml; charset = UTF-8).

jestem w stanie zobaczyć wyniki reagowania przez Firebug jeśli ustawić

dataType : "script" 

ale ponieważ nie jest rzeczywiście ważny js skrypt po prostu nie powiedzie się, Firebug wyświetla:

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

To staje się "lepsze", jeśli powyższe żądanie w przeglądarce i poprzez "View Source" skopiuj xml do sprawdzenia tutaj http://www.w3schools.com/Dom/dom_validate.asp wyświetla "nie znaleziono błędów", więc dlaczego nie będzie działać przez xmlhttprequest?

Co robię źle?

Czy można w jakiś sposób wymusić przetworzenie odpowiedzi xmlhttprequest jako tekst/zwykły?

Br iges

P.S. Zmęczyłem sugerowaną opcję dataType: "html" (zapomniałem wspomnieć początkowo), ale "html" również nie działa, aw Firebug widzę ten sam błąd o parsowaniu/moz-nullprincipal.

także usługa dostarczania danych XML jest kontrolowana przez osobę trzecią, do którego nie mam dostępu, albo istnieje sposób, aby to zrobić, albo będę musiał pocałować mój pomysł na pożegnanie :(

Odpowiedz

5

Czy wykonujesz ten kod z tej samej domeny? (http://soiduplaan.tallinn.ee)

Ponieważ nie wolno używać ajax wzywa do pobierania danych z innych domen ... (chyba że przy użyciu JSONP lub datatypes script ..)

Gdy dane są pobierane z zdalne serwery (co jest możliwe tylko przy użyciu typu danych skryptu lub jsonp), ...

Tha alternatywą byłoby mieć jQuery prośba lokalny plik, który będzie odbierać dane po stronie serwera i służyć im do żądania ajax ..

np
php: http_post_data
asp: Microsoft.XMLHTTP

+0

dodano obejście i przykładowe linki. –

-1

Doh”

próbował YQL zapytanie tylko dowiedzieć się, że plik robots.txt nie blokuje :(

0

To powinno załatwić sprawę:

$(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 
    } 
    }); 
    }); 
}); 

Zakładając masz plik HTML, takich jak:

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

UWAGA: To wydaje się działać prawidłowo w IE8, ale nie tyle w FF3.6

1

Nazywa się same origin policy. Nie możesz używać wywołań Ajax do pobierania danych z innych domen, chyba że używasz typów danych jsonp lub .

Powiązane problemy