有函数,当异步为假时它正在工作,但我想要相同的功能(我的意思是返回值),但异步是真的。
function Call(param, proc) {
var url = "../../DataManager/DataManagment.aspx/DataSelector";
var ret;
$.ajax({
url: url,
type: "POST",
datatype: "json",
data: JSON.stringify({
"data": param,
"action": proc
}),
contentType: "application/json; charset=utf-8",
success: function (data) {
ret = data;
},
async: false,
error: errorFn
});
return ret.d;
}
答案 0 :(得分:1)
做类似的事情:
function callServerAsync(){
$.ajax({
url: '...',
success: function(response) {
successCallback(response);
}
});
}
function successCallback(responseObj){
alert(JSON.stringify(responseObj)); // Only applicable to JSON response
}
答案 1 :(得分:1)
交配,你的问题是:return ret.d;
你应该让你返回ret.d;在success函数里面,否则,返回ret.d会立即返回,无论你ajax是否成功,这就是为什么当你强制ajax运行同步它有效时,但不是在异步因为那个时间ret只定义了但没有指定值,请检查:
function Call(param, proc) {
var url = "../../DataManager/DataManagment.aspx/DataSelector";
var ret;
$.ajax({
url: url,
type: "POST",
datatype: "json",
data: JSON.stringify({
"data": param,
"action": proc
}),
contentType: "application/json; charset=utf-8",
success: function (data) {
ret = data;
return ret.d;
},
async: true,
error: errorFn
});
}
答案 2 :(得分:0)
对于async = true;退货声明不符合您的目的。而是去寻找一些回调如下:
function Call(param, proc, callBackFunc) {
var url = "../../DataManager/DataManagment.aspx/DataSelector";
var ret;
$.ajax({
url: url,
type: "POST",
datatype: "json",
data: JSON.stringify({
"data": param,
"action": proc
}),
contentType: "application/json; charset=utf-8",
success: function (data) {
ret = data;
if(typeof callBackFunc == 'function')
{
callBackFunc(ret.d);
}
},
async: true,
error: errorFn
});
}
并将您的功能称为:
function myCallBackFunc(obj)
{
alert(obj);
}
//call the actual function like:
Call(param, proc,myCallBackFunc);
答案 3 :(得分:0)
来自AJAX等异步代码的can't return。相反,你需要重新考虑你的功能。
所以你要么需要使用回调并在成功函数中调用它,要么更好地只返回promise对象:
function Call(param, proc) {
var url = "../../DataManager/DataManagment.aspx/DataSelector";
return $.ajax({
url: url,
type: "POST",
datatype: "json",
data: JSON.stringify({
data: param,
action: proc
}),
contentType: "application/json; charset=utf-8",
error: errorFn
});
}
Call(params, process).then(function(data) {
console.log(data);
});