2009-06-09 97 views
8

我正在嘗試學習jQuery,並且我遇到了一個與ajax有關的小問題。我正在嘗試使用從頁面的XML響應返回的值填充JavaScript數組。
這裏是我的主網頁(ajax.html):即使查詢成功,jQuery ajax錯誤函數也會執行

<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是這樣的:(?沒有\反斜線)

//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生成此XML(如內容 - 類型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> 

的問題是,每次我打開ajax.html時候,AJAX查詢是成功的,但在執行錯誤的功能! xhr.status = 200(表示查詢正常)並且thrownException未定義。

+0

抱歉,XML沒有正確粘貼。這裏再次(有一些空格): <? xml version =「1.0」encoding =「ISO-8859-1」? > < ringType > IA < ringType > IL < ringType > IN < ringType > IR < ringType > RT Adrian 2009-06-09 09:13:37

+0

嘗試把<?XML版本= 「1.0」 編碼=」 UTF-8「?>在輸出XML文檔的頂部,如果您還沒有 – karim79 2009-06-09 09:32:59

+0

如果您在瀏覽器(http://mywebapp/ajaxHelper.pl)中打開ajaxHelper.pl文件,瀏覽器是否識別作爲XML文件的響應? – 2009-06-09 10:22:16

回答

4

這是否發生在所有瀏覽器?

1)您可以使用完成而不是成功和錯誤來處理狀態。使用if來檢查XHR返回狀態並相應地進行分支。

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

+0

這種行爲發生在所有瀏覽器上。我會盡量使用完整而不是成功,我會讓你知道。 – Adrian 2009-06-09 10:17:42

1

AJAX是異步的。這意味着$ .ajax函數將啓動一個請求ajaxHelper.pl。同時它繼續執行你的代碼。該請求沒有機會到達之後$就下一行(...)

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

,所以我想你得到ringType沒有定義異常前返回...?這可能是錯誤功能被觸發的原因。

相關問題