返回“success:”方法的数据?

时间:2011-10-13 12:04:31

标签: jquery ajax return-value

我正在尝试使用jquery:

获取我编写的实用程序方法的返回值
function loadFrames(coords, spritesheet) {
    return $.ajax({
        type: "GET",
        url: coords,
        dataType: "xml",
        success: function(xml,code,obj) {return parseFrameData(xml, spritesheet);}
    });
}

因此,此方法接收两个参数,打开一个文件(“plist”参数指向的文件)并运行parseFrameData方法。 后者返回一个对象数组。

我想以下列方式使用它:

var frames = loadFrames('player.xml', 'spritesheet.png');

但是我找不到说“以”'成功:'返回你在线调用的方法的价值的方式......“......

2 个答案:

答案 0 :(得分:2)

修改:{@ 3}}发布在@Tomalak问题链接,告诉我这个很酷的“承诺”概念,您可能还想看一下。

使用$ .ajax的目的通常是发出异步请求。调用它并期望立即返回值将是同步请求。

话虽如此,您可以通过设置async:false在同步模式下使用$ .ajax来执行您所要求的操作。这可能会影响锁定浏览器,直到请求完成。

function loadFrames(coords, spritesheet) {
  var myFrames;

  $.ajax({
    type: "GET",
    url: coords,
    dataType: "xml",
    async: false,
    success: function(xml,code,obj) {myFrames = parseFrameData(xml, spritesheet);}
  });
  return myFrames;
}

var frames = loadFrames('player.xml', 'spritesheet.png');

我相信这会有效,但我没有一个好的方法来测试它。其他人可以确认这种方法吗?

以@Petah建议的方式异步地执行此操作仍然会好得多。

答案 1 :(得分:1)

Ajax以异步方式运行(意味着在后台运行,允许其他内容继续),因此您无法直接从中返回值。

但是,您可以将函数传递给Ajax请求完成后将调用的回调函数。

function loadFrames(coords, spritesheet, callback) {
    $.ajax({
        type: "GET",
        url: coords,
        dataType: "xml",
        success: function(xml,code,obj) { callback(parseFrameData(xml, spritesheet)); }
    });
}

另外,在旁注中,不要忘记通过将error参数传递给ajax来电来检查404和500等HTTP错误