2010-10-21 77 views
0

調用$.ajax()後可以與XML文件進行交互嗎?

IE:

.$ajax( 
url: "someUrl", 
type: "GET", 
dataType:"xml", 
success: function(xml){ //some function }, 
error : function(){ //some function} 
}); 

$("#somebutton").click(function(xml){ //function that interacts with XML }); 

我一直無法與交互的任何XML文件的,除非所有的功能都是success參數中。任何提示,或者我只需要把我所有的功能放到success函數中?有沒有更好的方式來做我所描述的比使用$.ajax()

回答

1

成功函數是一個閉包,當響應從服務器返回時執行。變量xml僅在函數的範圍內有效。你可以做的是幾件事情:

  1. 把你的處理程序到成功 功能
  2. 創建Ajax調用的變量之外,並且在成功 功能的XML值分配給 變量

這樣:

var xmlObj = ""; 
$.ajax({ 
    success:function(xml) { 
    xmlObj = xml; 
    } 
}); 

alert(xmlObj); 
+0

哇,我壓根沒想到要一個全局變量賦值XML。謝謝! – Ian 2010-10-22 01:08:57

1

的功能並不一定要在成功的樂趣使用它,但xml變量只存在於成功函數範圍內,您將不得不爲其設置另一個變量。

不工作

$.ajax( 
    url: "someUrl", 
    type: "GET", 
    dataType:"xml", 
    success: function(xml){ //some code }, 
    error : function(){ //some code} 
}); 

function parse() { 
    //xml processing code 
} 

作品

var myXML; 

$.ajax( 
    url: "someUrl", 
    type: "GET", 
    dataType:"xml", 
    success: function(xml){ 
    myXML = xml; 
    //some code 
    }, 
    error : function(){ //some code} 
}); 

function parse() { 
    //myXML processing code 
} 

此外,如果你會打電話解析之前AJAX調用已成功完成,然後與myXML變量仍然爲空。總是可以執行檢查。

function parse() { 
    if (myXML) { 
    //myXML processing code 
    } else { 
    //ajax not completed successfully yet 
    } 
} 
+0

感謝您提供關於全局變量的更多信息。另一個問題:不是「if(myXML)」只是檢查變量是否已經初始化?還是檢查變量是否具有價值? – Ian 2010-10-22 01:12:45

+0

它檢查以確保該變量不是空的,並且不等於0或false。所以未定義,null,「」,0和false都會導致錯誤。只是一個快速的方法來檢查。並不總是最好的(取決於具體情況),但它會完成這項工作。 – CastroXXL 2010-10-22 14:42:29

1

你也能做到這樣,它不需要全局變量:

$.ajax({ 
    url: "someUrl", 
    type: "GET", 
    dataType:"xml", 
    success: function(xml){ 
     $("#somebutton").bind("click",{xmlData:xml}, buttonClick); 
    }, 
    error : function(){ /*some code*/ } 
}); 

function buttonClick(event) { 
    var xml = event.data.xmlData; 
    //function that interacts with XML 
}
+0

感謝您的回答。我認爲將xml設置爲全局變量對於我來說是一個更好的解決方案,但是我會爲未來的項目考慮這個方法!很高興知道有很多方法可以完成這些事情! – Ian 2010-10-22 01:10:33

相關問題