有一些关于获取get-call的返回值的帖子。但我的问题仍然存在。
我的来源
...
$.get("list.svc/XmlTestService", function (XmlData) { console.log(XmlData); }, "xml");
...
alert($Loc['Name']);
...
我在控制台上获得了一个正确的XML文档。 Normaly我必须继续使用Xml来做某事。这将在一个单独的函数中完成:
function GetOutXml (XmlData) {
...
return { 'Name': ValueName }
}
现在我需要缩小我的接听电话和警报之间的差距。我尝试了一些不同的东西但没有成功。一种方式是这样的:
...
var $Xml = null;
$.get("list.svc/XmlTestService", function (XmlData) { $Xml = XmlData; }, "xml");
var $Loc = GetOutXml($Xml);
...
但没有成功。我是JS世界的新手(只有基础知识)。 Normaly我用功能架构构建了我的源代码。
我该怎么做?
更新: 好的......在阅读了很多内容后,我以另一种方式解决了我的问题。因为做匿名函数中的每一件事都不是我的思维方式,而且很难阅读和追随。
所以我做了什么:
...
var $Xml = null;
$.ajax({type:'GET',url:"list.svc/XmlTestService",success: function(Data) { $Xml = Data;},dataType:'xml',async:false});
...
var $Loc = GetOutXml($Xml);
...
重要的一步是使用ajax命令完成工作,因为可以将async设置为false,因此它是同步的。
感谢您的帮助。
答案 0 :(得分:2)
Ajax是异步 - get
调用启动进程,但它稍后完成 。因此,调用后的代码在回调中的代码之前运行。 (“回调”是你传递给get
的函数。“回调”是一个函数的通用术语,后来在响应某些东西时被“回调”。事件处理程序也是回调函数,虽然奇怪的是我们很少调用那些。)
你想要做的事实是在回调中做你的工作:
$.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");
答案 1 :(得分:0)
$.get("list.svc/XmlTestService", GetOutXml, "xml");
function GetOutXml (XmlData) {
...
return { 'Name': ValueName }
}
你需要什么?