有这样的一个简单的调用脚本
function testAjax() {
$.ajax({
url: ""getvalue.php"",
success: function(data) {
return data;
}
});
}
但如果这样
var output = testAjax(svar); // output will be undefined...
那么怎样才能返调用数据?下面的代码似乎不工作...
function testAjax() {
$.ajax({
url: ""getvalue.php"",
success: function(data) {
}
});
return data;
}
不能从异步函数中返回任何东西。你可以回报的是一个承诺。我解释了在这些问题的答案中,jQuery中的承诺是如何工作的:
返回AJAX调用数据的JavaScript函数
jQuery jqXHR - 取消链接调用,触发错误链
如果你能解释你为什么要返回数据,以后又想怎么处理,那么我可能会给你一个更具体的答案。
一般来说,而不是:
function testAjax() {
$.ajax({
url: "getvalue.php",
success: function(data) {
return data;
}
});
}
你可以这样写你的testAjax函数:
function testAjax() {
return $.ajax({
url: "getvalue.php"
});
}
那么你可以得到这样的承诺:
var promise = testAjax();
你可以存储你的承诺,你可以传递它,你可以在函数调用中用它作为参数,你可以从函数中返回它,但是当你最终想要使用由AJAX调用返回的数据时,你必须像这样做:
promise.success(function (data) {
alert(data);
});
(有关简化语法,请参阅下面的更新。)
如果你的数据在这个时候是可用的,那么这个函数将被立即调用。如果不是的话,只要数据可用,它就会被调用。
完成这一切的关键是你的数据在调用$ .ajax之后不能立即使用,因为它是异步的。承诺是一个很好的功能抽象说:我不能返回你的数据,因为我还没有它,我不想阻止,让你等待,所以这是一个承诺,而不是,你将能够稍后再使用它,或者把它交给其他人,并完成它。
从函数返回数据的唯一方法是进行同步调用,而不是异步调用,但是在等待响应时会冻结浏览器。
你可以传递一个处理结果的回调函数:
function testAjax(handleData) {
$.ajax({
url:"getvalue.php",
success:function(data) {
handleData(data);
}
});
}
像这样调用它:
testAjax(function(output){
// here you use the output
});
// Note: the call won't wait for the result,
// so it will continue with the code here while waiting.