JQuery的Ajax调用,没有调用成功或错误
可能重复:
如何从函数返回AJAX调用的响应?
我正在使用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;//doesnt goes here
},
error: function (textStatus, errorThrown) {
Success = false;//doesnt goes 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成功调用。 价值也在变化。 但是在服务之后, 成功:或者错误:函数没有被调用 ,在这种情况下,应该调用成功,但它不起作用。
我使用了萤火虫,发现成功或错误功能正在跳过,直接return Success;
似乎无法找到与代码有什么问题。
提前致谢
更新:添加async: false
解决了这个问题
将您的代码更改为
function ChangePurpose(Vid, PurId) {
var Success = false;
$.ajax({
type: "POST",
url: "CHService.asmx/SavePurpose",
dataType: "text",
async:false,
data: JSON.stringify({ Vid: Vid, PurpId: PurId }),
contentType: "application/json; charset=utf-8",
success: function (data) {
Success = true;//doesnt goes here
},
error: function (textStatus, errorThrown) {
Success = false;//doesnt goes here
}
});
//done after here
return Success;
}
您只能从synchronous
函数返回值。 否则,你将不得不作出callback
。
所以我刚刚添加async:false,
给你的ajax调用
更新:
jquery ajax调用默认是异步的。 所以当Ajax加载完成时,成功和错误函数将被调用。 但是你的return语句会在ajax调用刚刚开始后执行。
一个更好的方法将是
// callbackfn is the pointer to any function that needs to be called
function ChangePurpose(Vid, PurId, callbackfn) {
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) {
callbackfn(data)
},
error: function (textStatus, errorThrown) {
callbackfn("Error getting the data")
}
});
}
function Callback(data)
{
alert(data);
}
并称为ajax
// Callback is the callback-function that needs to be called when asynchronous call is complete
ChangePurpose(Vid, PurId, Callback);
尝试将ajax调用封装到函数中,并将异步选项设置为false。 请注意,自jQuery 1.8以后,此选项已被弃用。
function foo() {
var myajax = $.ajax({
type: "POST",
url: "CHService.asmx/SavePurpose",
dataType: "text",
data: JSON.stringify({ Vid: Vid, PurpId: PurId }),
contentType: "application/json; charset=utf-8",
async: false, //add this
});
return myajax.responseText;
}
你也可以这样做:
$.ajax({
type: "POST",
url: "CHService.asmx/SavePurpose",
dataType: "text",
data: JSON.stringify({ Vid: Vid, PurpId: PurId }),
contentType: "application/json; charset=utf-8",
async: false, //add this
}).done(function ( data ) {
Success = true;
}).fail(function ( data ) {
Success = false;
});
你可以阅读更多关于jqXHR jQuery Object的内容
链接地址: http://www.djcxy.com/p/9491.html