gpt4 book ai didi

javascript - jQuery 没有进行异步调用 evel async :false specified

转载 作者:行者123 更新时间:2023-12-01 02:13:06 26 4
gpt4 key购买 nike

这是我的代码

var jsonpath;

function loginFromDef() {

var a = grantAccess($('#login :input').serialize());
if (a.Msg) {
$('#msg').html(a.Msg).attr('class', 'error');
}
else if (a.done) {
var returnUrl = getQueryString('ReturnURL');
if (returnUrl)
window.location = returnUrl;
else
window.location = 'Home.aspx';
}


return false;
}

function grantAccess(dataToPost) {

$.ajax({
type: "POST",
url: jsonpath + 'Json.ashx?method=GrantAccess',
async: false,
data: dataToPost,
success: function (data) {
return data;
}
});
}

function getQueryString(name) {
var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

var jsonPath 是在 Default.aspx 页面中定义的,我在提交按钮的 onclick 事件上调用函数 loginFromDef()

我收到错误TypeError:a未定义不用担心我的 .ashx 处理程序。它运行良好。我会测试一下。

我认为函数 loginFromDef 中的 var a 没有被初始化。因为可能是jQuery正在进行异步调用。即使我在选项中设置了 async:false

我怎么了..?请提出解决方案。

最佳答案

您在 grantAccess 中没有任何 return 语句。回调中的 return 语句没有任何效果(因为它是由 $.ajax 在内部调用的)。

Ajax 调用是同步的,但您不会从 grantAccess 返回任何数据。

你可以这样做:

return $.ajax({
type: "POST",
url: jsonpath + 'Json.ashx?method=GrantAccess',
async: false,
data: dataToPost,
}).responseText;

也许您必须在返回该值之前使用 $.parseJSON

$.ajax 返回一个 jqXHR 对象,您可以在 documentation 中找到更多信息。 .

但是,我强烈建议不要使用同步 Ajax 调用,并且我不认为您有任何理由需要在这里使用同步 Ajax 调用。同步请求可能会阻塞浏览器(包括其 UI),直到收到响应为止,从而使浏览器无响应,从而导致不良的使用体验。

更改您的代码,以便可以使用回调来处理响应。例如:

function loginFromDef() {

grantAccess($('#login :input').serialize()).done(function(a) {
if (a.Msg) {
$('#msg').html(a.Msg).attr('class', 'error');
}
else if (a.done) {
var returnUrl = getQueryString('ReturnURL');
if (returnUrl)
window.location = returnUrl;
else
window.location = 'Home.aspx';
}
});

return false;
}

其中grantAccess仅返回由$.ajax返回的jqXHR对象:

function grantAccess(dataToPost) {
return $.ajax({
type: "POST",
url: jsonpath + 'Json.ashx?method=GrantAccess',
data: dataToPost
});
}

关于javascript - jQuery 没有进行异步调用 evel async :false specified,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12051097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com