返回“success:”方法的数据?
我正在尝试获取我使用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');
但是我没有找到说“以”’成功:’返回你在线调用的方法的价值的方法……“
编辑: @Tomalak问题的回答链接告诉我这个很酷的’Promises’概念,你可能也想看一看。
使用$ .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建议的方式异步地执行此操作仍然会好得多。
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错误