gpt4 book ai didi

asp.net-mvc - 使用将 Ajax 返回到 Ajax.BeginForm 的 onBegin 的函数

转载 作者:行者123 更新时间:2023-12-02 00:16:28 24 4
gpt4 key购买 nike

编辑:更清楚地说,我希望 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/

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