【发布时间】:2016-10-15 08:41:43
【问题描述】:
我有一个重定向用户的回调函数,我希望在警报窗口上单击“确定”后触发它。现在,代码如下所示:
function myFunction(callback) {
var ajaxUrl = "url_path";
$.ajax({
url: ajaxUrl,
success: function (data) {
if (data.fieldIsTrue) {
alert("You are being redirected", callback());
} else {
callback();
}
}
});
}
其中回调包含重定向和表单提交。回调会根据视图模型字段转到不同的位置,因此回调不应有所不同。
问题在于,一旦弹出警报而不是单击警报时,就会调用警报中的回调。无论如何我可以让警报窗口保持在页面之间或在警报消失后执行回调吗?
编辑:最初,我曾尝试使用如下所示的成功函数:
success: function (data) {
if (data.fieldIsTrue) {
alert("You are being redirected", callback());
}
callback();
}
所以我不认为解决方案是
alert();
callback();
Edit2:刚刚尝试做
alert();
callback();
并确认在点击弹出窗口之前重定向仍然发生
这里有更多信息,因为问题出在其他地方:
带有回调的函数调用:
$(".button").click(function (e) {
//e.preventDefault(); doesn't seem to help
myFunction(function () {
if ($("#myForm").validate().form()) {
$("button").disable();
document.forms['myForm'].submit();
} else {
ValidateFields();
}
});
部分cshtml:
@{Html.BeginForm<MyController>(x => x.FunctionWithRedirects(null), FormMethod.Post, new { id = "myForm" });}
//some hidden fields
<button class="button myButton">Button I want to alert from</button>
@{Html.EndForm();}
解决方案:所以我最终的工作解决方案实际上具有原始功能,然而似乎我在原始按钮单击中没有 e.preventDefault()初始化,所以表单仍然会提交。这是我的疏忽,感谢所有试图提供帮助的人。
【问题讨论】:
-
您原来的
success有alert("xx", callback()),而不是alert("xx"); callback()- 如果callback()在alert()括号内,它将在显示警报之前调用 - 试试@jszobody 的给出的答案(只有一个回调()调用) -
在
callback中添加重定向以外的内容 - 例如,只是另一个alert(使用不同的文本)。然后你会看到它是否被调用以及何时调用。 -
@freedomn-m 好的,我尝试将 alert("from callback") 放入顶部的回调函数中。发生的事情是,另一个(“您正在被重定向”)警报功能没有出现,然后重定向仍然发生,而新警报却出现了。看起来无论出于何种原因,回调在警报之前执行?