0

有一些关于获取 get-call 的返回值的帖子。但我的问题仍然存在。

我的来源

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

我得到一个在控制台上正确的 XML 文档。通常我必须继续使用 Xml 来做某事。这将在一个单独的函数中完成,如下所示:

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

现在我需要缩小我的接听电话和警报之间的差距。我尝试了一些不同的东西,但没有成功。一种方法是这样的:

...
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-command 来完成这项工作,因为可以将 async 设置为 false,因此它是同步的。

谢谢你帮助我。

4

2 回答 2

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");
于 2013-07-25T07:31:11.190 回答
0
$.get("list.svc/XmlTestService", GetOutXml, "xml");

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

是你需要的吗?

于 2013-07-25T07:42:46.197 回答