@using (Ajax.BeginForm("Edit", "xyz", new AjaxOptions {
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
UpdateTargetId = "divDisplay",
}))
{
<input type="submit" value="Edit" id="Edit" class="formBtn" onclick='return OpenErrorPopup()'/>
}
<script type="text/javascript" language="javascript">
function OpenErrorPopup() {
debugger;
var temp = false;
$.ajax({
cache: false,
url: "/xyz/ChecLogin/",
success: function (UserLoggedOn) {
debugger;
if (UserLoggedOn == "True") {
if (condition) {
temp = false;
return temp;
}
else {
temp = true;
return temp;
}
}
else {
temp = false;
return temp;
}
},
error: function (err) {
temp = false;
return temp;
}
});
debugger;
return temp;
}
</script>
预期:首先调用openErrorPopup,执行ajax然后动态返回值。
实际:虽然调用了openErrorPopup,但它首先将temp值直接返回到<input .... onclick=...>
,然后执行ajax。
我开始知道ajax执行将是异步的。所以我尝试了ajax的OnBegin事件但是没有返回值。请在这两个问题中提供一些解决方案。
由于
答案 0 :(得分:1)
将此输入button
(或者总是从OpenErrorPopup返回false)并通过$('form#xxx').submit()
在OpenErrorPopup中提交表单。
答案 1 :(得分:1)
如果您在同一个域上进行ajax调用,则可以指示jQuery.ajax同步。只需将“async:false”传递给ajax选项:
$.ajax({
cache: false,
async:false,
url: "/xyz/ChecLogin/",
success: function (UserLoggedOn) { ...
并且不需要从成功和错误回调中返回tmp,只需初始化它。