【发布时间】:2013-01-23 09:05:23
【问题描述】:
可能重复:
How do I return the response from an asynchronous call?
我正在使用 Jquery Ajax 调用服务来更新值。
function ChangePurpose(Vid, PurId) {
var Success = false;
$.ajax({
type: "POST",
url: "CHService.asmx/SavePurpose",
dataType: "text",
data: JSON.stringify({ Vid: Vid, PurpId: PurId }),
contentType: "application/json; charset=utf-8",
success: function (data) {
Success = true;//doesn't go here
},
error: function (textStatus, errorThrown) {
Success = false;//doesn't go here
}
});
//done after here
return Success;
}
和服务:
[WebMethod]
public string SavePurpose(int Vid, int PurpId)
{
try
{
CHData.UpdatePurpose(Vid, PurpId);
//List<IDName> abc = new List<IDName>();
//abc.Add(new IDName { Name=1, value="Success" });
return "Success";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
正在从 AJAX 成功调用服务。 值也在发生变化。但是在服务之后,success:或error:函数没有被调用,在这种情况下,应该调用成功,但它不起作用。
我用firebug发现,成功或者错误的函数都被跳过,直接转到return Success;
似乎找不到代码有什么问题。
更新:
添加async: false 解决了问题
【问题讨论】:
-
这就是 Ajax 的工作原理……欢迎使用异步!如果它让你感到安慰:感觉至少有三个人每天问这个问题。
-
您不知道如何正确检查代码。由于 AJAX 是异步的,因此断点可能更有帮助
-
您在 Success = true 之前是否发出警报
-
怀疑有人会回到这里,但这个“重复”更好的是它在标题中使用的词更有可能与遇到此问题的人的搜索相匹配。在其他答案的情况下,您必须特别了解该答案才能生成将您引导至该页面的搜索。当然,这个页面会引导你到那个页面,但仍然如此。
-
尝试使用以下命令: ``` complete: function (xhr, status) { alert("Ajax 请求完成时调用"); } ```
标签: javascript web-services jquery