2009-06-09 18 views
8

JQuery'yi öğrenmeye çalışıyorum - ve ajax ile küçük bir sorunum var. Bir javascript dizisini bir sayfadan XML yanıtından döndürülen değerlerle doldurmaya çalışıyorum. (? \ Tersbölülerle olmadan):JQuery ajax hata işlevi sorgu başarılı olsa bile yürütülür

<html> 
<head> 
<script type="text/javascript" src="jquery/jquery.js"></script> 
<script type="text/javascript" src="jquery/fiber.js"></script> 
</head> 
<body> 
<p>Ajax</p> 
<script> 
var ringType = new Array(); 

</script> 
</body> 
</html> 

fiber.js şudur:

//process things for fiber map 
jQuery(document).ready(function() { 
// do stuff when DOM is ready 

//populate and display ringType 
$.ajax({ 
    type: "GET", 
    url: "ajaxHelper.pl", 
    data: { 
     getRingTypes: "1", 
     }, 
    dataType: "xml", 
    success: function(xml) { 
     //if the query was successfull, 
     alert("Got an xml object:"+$(xml)); 
     $(xml).find("ringType").each(function(){ 
      alert("Received reply "+$(this).text()); 
      var type = $(this).html(); //save the value 
      //append to ringType array 
      ringType.push(type); 
     }); 
    }, 
    error:function (xhr, ajaxOptions, thrownError){ 
     alert(xhr.status); 
     alert(thrownError); 
    } 
}); 
for(var i=0; i<ringType.length; i++){ 
    document.write("<br>"+ringType[i]); 
} 

}); 

ajaxHelper.pl bu XML üretir (İçerik- olarak
İşte benim ana sayfası (ajax.html) var tipi text/xml):

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <\?xml version="1.0" encoding="ISO-8859-1"\?> 
    <ringType>IA</ringType> 
    <ringType>IL</ringType> 
    <ringType>IN</ringType> 
    <ringType>IR</ringType> 
    <ringType>RT</ringType> 
sorundur

, ben ajax.html yük her zaman, ajax sorgu başarılı olur, ancak hata fonksiyonu çalıştırılır! xhr.status = 200 (sorgu tamamlandı anlamında) ve thrownException tanımlanmamış.

+0

Maalesef dönen emin olun, xml doğru yapıştırın vermedi. İşte yine gider (bazı boşluklarla): < ringType > IA < ringType > IL < ringType > İN < ringType > İR < ringType > RT Adrian

+0

koyarak deneyin karim79

+0

henüz yoksa, XML dosyasının üstündeki UTF-8 "?>, Tarayıcı yapar dosyadan XML olarak yanıt? –

cevap

4

Bu, tüm tarayıcılarda gerçekleşir mi?

1) Durumu işlemek için başarı ve hata yerine tam kullanabilirsiniz. XHR dönüş durumunu kontrol etmek için bir if ve buna göre dal kullanın.

http://docs.jquery.com/Ajax/jQuery.ajax#options

+0

Bu davranış, tüm tarayıcılarda gerçekleşir. Başarı yerine tamamlamayı kullanmaya çalışacağım ve size bildireceğim. – Adrian

+1

Tüm işlevi ekledim ve durumunu kontrol ettiğimde, "parsererror" alıyorum - gönderdiğim xml geçerli değil. En azından şimdi nerede kazmaya devam edeceğimi biliyorum. Teşekkür ederim! – Adrian

+0

Görünüşe göre, XML'lerin, xsd'lerin geçerli olduğunu tanımlaması gerekir. Kodum onlarsız çalışmayacak. Şimdi (eksik tanımı yarattığım), tüm işler beklendiği gibi. – Adrian

1

AJAX Asenkron olduğunu. $ .ajax işlevinin ajaxHelper.pl isteğini başlatması anlamına gelir. Bu arada kodunuzu yürütmeye devam ediyor. isteği $ .ajax sonraki satırını (...)

for(var i=0; i<ringType.length; i++){... 

Bu yüzden Ringtype tanımlı olmadığı bir istisna alıyoruz varsayalım ulaşmadan geri dönmek için bir şansı var ...? Ve bu yüzden hata fonksiyonu tetiklenebilir.

+0

Yeterince adil, ancak bu uyarıları başlatma işlevinin başlamasını bile tetiklemiyor ... – Adrian

+0

Bir hata atıldığında, betik çalışmayı durdurur. JQuery'ye, istisnaları nasıl ele aldıklarına bakmadım, ama sadece döngü için geridönüşümün içinde hareket etmeyi deneyin. – gregers

5

http://groups.google.com/group/jquery-en/browse_thread/thread/23679594ebe128a9 yoluyla sunucunun 200 durum koduyla bir XML belgesi geri dönebilirler. Ancak tarayıcı belgeyi ayrıştıramazsa bir parseerror oluşacak ve jQuery'nin hata işleyicisi çalıştırılacaktır.

Geçerli xml :)

+0

Bu sorun vardı, ancak JSON sonuçları ile. Düzeltme yine aynıydı ve çalıştı: geçerli JSON'u döndür ve tarayıcı mutluydu, dönüşte doğru olayı çağırıyordu. – dbarros

İlgili konular