编辑:更清楚地说,我希望 onBegin 调用一个从 Ajax 调用返回 true 或 false 值的函数。该 false 值需要能够触发 onBegin 来中止表单提交,就像我从非 ajax 函数返回了 false 值一样。
如果存在某些条件,我需要向 Ajax.BeginForm 的 onBegin 返回 false 值。这样,如果存在某些数据库条件,我可以阻止表单提交。
但是,为了使用 Ajax Get 的结果,我需要制作函数来使用回调,这意味着我无法让 onBegin 使用的函数返回 ajax 值。那么如何将结果传递给onBegin呢?
基本上我有:
`Ajax.BeginForm(onBegin="checkIfMyConditionExists();"`}...
function checkIfMyConditionExists(){
$.get(checkConditionURL, function(data){
doSomething(data);
});
如何将该数据(这将是我的真值或假值)获取到 onBegin 中?
最佳答案
如果不同步,您想要完成的事情就不会发生。您将必须执行同步检查。否则,将调用检查,但在 ajax 调用有时间说“等我”之前,将提交表单和其他内容。
在对服务器的 ajax 调用中,您必须在 $.ajax
调用上设置 async: false
。这将使其在运行下一段代码之前达到预期的某种结果。请记住,您不想执行 $.get
因为没有选项可以将其关闭。
如果您“不希望 UI 挂起”....放置某种加载图标或文本。无论如何,这对于“ajax”来说是一个很好的实践......
这是您可以使用的代码:)
function checkIfMyConditionExists () {
$.ajax({
url: checkConditionURL,
async: false,
success: function (data) {
if (!data.success) {
return false;
}
// put your code to run something here!
}
});
}
实际上不需要比这更复杂。实现此操作时还需要记住一些事情...
Per the jQuery.ajax documentation :
As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success().
另一种实现此目的的方法是执行以下操作。
在表单上使用标准按钮。 (不是提交)
<button id="TriggerButton">Submit</button>
处理该按钮的点击。做你的检查。如果成功,请提交表单!
$(function () {
$("#TriggerButton").click(function (e) {
e.preventDefault();
$.ajax({
url: checkConditionURL,
success: function (data) {
if (!data.success) {
// ruh roh!
return false;
}
// submit le form!
$("#MyForm").trigger("submit");
}
});
});
});
使用此方法,您可以删除 onBegin,它应该执行您需要执行的操作。 :)
关于asp.net-mvc - 使用将 Ajax 返回到 Ajax.BeginForm 的 onBegin 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17174684/