当async为true时,Ajax调用返回undefined
Ajax Call returns undefined when async is true
有函数,当async为false时它可以工作,但我想要相同的功能(我指的是返回值),但async为true。
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;
}
执行以下操作:
function callServerAsync(){
$.ajax({
url: '...',
success: function(response) {
successCallback(response);
}
});
}
function successCallback(responseObj){
alert(JSON.stringify(responseObj)); // Only applicable to JSON response
}
对于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);
mate,您的问题是:返回ret.d;
您应该让您返回ret.d;在success函数中,否则,无论您的ajax是否成功,return ret.d都会立即返回,这就是为什么当您强制ajax运行sync时,它是有效的,但当async时却不起作用,因为时间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
});
}
您不能从像AJAX这样的异步代码返回。相反,你需要重新考虑一下你的功能。
因此,您要么需要使用回调并在成功函数中调用它,要么最好只返回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);
});
相关文章:
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Javascript/jQuery中的并行Ajax调用
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- node.js请求数据事件未在CORS ajax调用中触发
- 如何从ajax调用返回.wrap()元素
- Ajax调用在Firefox中不会自动响应
- AJAX调用中的非法调用
- 使用AJAX调用将GeoJSON数据拉入传单
- 在MVC 4中,对Controller的Ajax调用为空
- Jquery:对返回JSON数据的php脚本的Ajax调用
- 在ajax调用中阻止来自JS对象的函数
- 如何在MVC5中ajax调用的部分视图中引用外部javascript
- 页面加载后的Ajax调用
- 如何使用Ajax调用特定的控制器和操作来重定向用户
- curl和fileget_contents在ajax调用后不起作用
- 在任何AJAX调用之前触发一个javascript函数
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- Ajax调用ERror Cross Origin REquest:在rails中自动完成大学列表
- ASP.NET MVC 3-在ajax调用后,重定向到新页面或生成页面刷新
- 点击功能没有'ajax调用动态元素(Backbone)后无法工作