jQuery get - 使用返回的值

时间:2013-07-25 07:29:24

标签: javascript jquery get response

有一些关于获取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,因此它是同步的。

感谢您的帮助。

2 个答案:

答案 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 }
}

你需要什么?