2013-07-25 76 views
0

有一些關於獲取get-call返回值的信息。但我的問題仍然存在。jQuery get - 使用返回值

我的源

... 
$.get("list.svc/XmlTestService", function (XmlData) { console.log(XmlData); }, "xml"); 
... 
alert($Loc['Name']); 
... 

我得到一個XML文檔是在控制檯上正確。通常我必須繼續使用Xml來做一些事情。這將在一個單獨的函數來完成這樣的:

function GetOutXml (XmlData) { 
    ... 
    return { 'Name': ValueName } 
} 

現在我需要關閉我的GET呼叫和警報之間的差距我。我嘗試了一些不同的東西,但沒有成功。一種方式是這樣的:

... 
var $Xml = null; 
$.get("list.svc/XmlTestService", function (XmlData) { $Xml = XmlData; }, "xml"); 
var $Loc = GetOutXml($Xml); 
... 

但沒有成功。我與JS的世界(僅基本)新的。通常我用功能性架構來構建我的源代碼。

我該如何做到這一點?

更新: 好的...我在閱讀了很多內容後,以其他方式解決了我的問題。因爲做匿名功能中的每一件事都不是我的思維方式,時間之後很難閱讀和追蹤。

所以我做了什麼:

... 
var $Xml = null; 
$.ajax({type:'GET',url:"list.svc/XmlTestService",success: function(Data) { $Xml = Data;},dataType:'xml',async:false}); 
... 
var $Loc = GetOutXml($Xml); 
... 

的重要步驟是用Ajax的命令去做,因爲posibility以異步設置爲false,所以它是同步的工作。

感謝您的幫助。

回答

2

Ajax是異步 - 在get呼叫開始的過程,但它完成。所以你的代碼在回調之前在代碼之前運行。 (「回調」是你傳遞給get的函數,「callback」是一個函數的通用術語,後面會迴應一些事件,回調函數也是回調函數,儘管奇怪的是我們很少稱它爲回調函數。

你想要做的實際上是做你在回調的工作:

$.get("list.svc/XmlTestService", function (XmlData) { 
    // Use XmlData here 
}, "xml"); 

這似乎陌生,但它很快就會非常熟悉。

因此,例如,假設您的代碼看起來像這樣並且不工作;

// This doesn't work 
var a, b; 
var $Xml; 
a = doSomething(); 
b = /* ...some other thing... */; 
$.get("list.svc/XmlTestService", function (XmlData) { 
    $Xml = XmlData; 
}, "xml"); 
if (a > b) { 
    doSomethingWithXml($xml); 
} 
else { 
    doADifferentThingWith($xml); 
} 

改變,看起來像這樣:

// This does work 
a = doSomething(); 
b = /* ...some other thing... */; 
doSomething(); 
$.get("list.svc/XmlTestService", function ($Xml) { 
    if (a > b) { 
     doSomethingWithXml($xml); 
    } 
    else { 
     doADifferentThingWith($xml); 
    } 
}, "xml"); 
0
$.get("list.svc/XmlTestService", GetOutXml, "xml"); 

function GetOutXml (XmlData) { 
    ... 
    return { 'Name': ValueName } 
} 

是你需要什麼?