Jquery Ajax调用,不调用成功或错误[duplicate]

这个问题在这里已经有答案了

8年前关闭的

可能重复:
如何从异步调用返回响应

我使用jQueryAjax调用服务来更新值

功能更改目的(Vid、PurId){
var成功=false;
$.ajax({
类型:“POST”,
url:“CHService.asmx/SavePurpose”,
数据类型:“文本”,
数据:JSON.stringify({Vid:Vid,PurpId:PurId}),
contentType:“应用程序/json;字符集=utf-8”,
成功:功能(数据){
Success=true;//不在这里
},
错误:函数(textStatus,errorshown){
Success=false;//不在这里
}
});
//在这里完成
回归成功;
}

和服务:

[WebMethod]
公共字符串SavePurpose(int-Vid,int-PurpId)
{
尝试
{
CHData.UpdatePurpose(Vid,PurpId);
//列表<IDName>abc=新列表<IDName>();
//Add(新的IDName{Name=1,value=“Success”});
返回“成功”;
}
捕获(例外情况除外)
{
抛出新异常(例如消息);
}
}

正在从AJAX成功调用该服务值也在更改。但是在服务之后,成功:错误:函数未被调用,在这种情况下,应该调用成功,但它不起作用

我使用firebug发现,正在跳过success或error函数,并直接转到return success

似乎找不到代码的问题所在

更新:
添加async:false修复了该问题

将代码更改为:

功能更改目的(Vid、PurId){
var成功=false;
$.ajax({
类型:“POST”,
url:“CHService.asmx/SavePurpose”,
数据类型:“文本”,
async:false,
数据:JSON.stringify({Vid:Vid,PurpId:PurId}),
contentType:“应用程序/json;字符集=utf-8”,
成功:功能(数据){
成功=真实;
},
错误:函数(textStatus,errorshown){
成功=错误;
}
});
//在这里完成
回归成功;
} 

只能从同步函数返回值。否则,您必须进行回调

所以我刚刚在ajax调用中添加了async:false,

更新:

默认情况下,jqueryajax调用是异步的。那么成功与否,;ajax加载完成后将调用错误函数。但是您的return语句将在ajax调用启动后立即执行

更好的方法是:

//callbackfn是指向需要调用的任何函数的指针
函数更改目的(Vid、PurId、callbackfn){
var成功=false;
$.ajax({
类型:“POST”,
url:“CHService.asmx/SavePurpose”,
数据类型:“文本”,
数据:JSON.stringify({Vid:Vid,PurpId:PurId}),
contentType:“应用程序/json;字符集=utf-8”,
成功:功能(数据){
callbackfn(数据)
},
错误:函数(textStatus,errorshown){
callbackfn(“获取数据时出错”)
}
});
} 
函数回调(数据)
{
警报(数据);
}

并将ajax称为:

//Callback是异步调用完成时需要调用的回调函数
变更目的(Vid、PurId、回调);

发表评论