0

简而言之
,我想在用户单击“确定”按钮后进行一些异步服务器端验证(使用 AJAX)。如果验证失败,我想在提示符上显示错误消息而不关闭它。

细节

我正在使用即兴版本 3.1。我找不到 3.1 的文档,所以检查了4.0.1 版本的文档,有两种方法可以做到这一点 -

返回 false 或 event.preventDefault() 以保持提示打开

我检查过,因为我使用的是旧版本,所以事件变量在这样的函数内部不可用 -

$.prompt('Example 2',{ buttons: { Ok: true, Cancel: false }, submit: submitCertificationPrompt } });

function submitCertificationPrompt(e,v,m,f)
{
 //e is not available in case of version 3.0.1
}

我现在无法升级到最新版本,因为我们对 3.1 版插件代码进行了一些自定义。

所以,我只剩下使用这种return false方式了。我检查了这是否有效-

 $.prompt('Example 2',{ buttons: { Ok: true, Cancel: false }, submit: submitCertificationPrompt } });

    function submitCertificationPrompt()
    {
       return false;
    }

但是,由于我必须等到收到 AJAX 响应,所以我尝试使用这样的 javascript 回调函数,但它没有像我预期的那样工作 -

$.prompt('Example 2',{ buttons: { Ok: true, Cancel: false }, submit: function(){ submitCertificationPrompt(function(bool){ return bool; }) } });

function submitCertificationPrompt(callback)
{
    //I will do an AJAX call here and the prompt should stay open if the response reads validation error. So, I will callback false in that case

    callback(false);
}

请帮忙...

4

2 回答 2

1

你需要做一个小的改变,只需添加一个参数 async: false,你在哪里调用 ajax,如下所示

 $.ajax(
                        {
                            type: 'POST',
                            url: '/Path/TestPost',
                            async: false,
                            data: form.serialize(),
                            success: function(data) {

}

更多信息:在执行 jquery Ajax/MVC 帖子时保持即兴“向上”

于 2013-07-31T12:19:08.197 回答
0

好吧,我不太确定你在做什么,但利用 $.ajax 正在实现jQuery 延迟接口的事实:

$.ajax({
    // the opts for the call.
    // see the documentation.
}).promise().then(function()
{
    // this gets executed when the ajax call comes back with an OK HTTP code like 200
    // perform console.log(arguments) here to see what you get.
}, function()
{
    // this gets executed when the ajax call comes back with an ERROR HTTP code like 500
    // perform console.log(arguments) here to see what you get.
}).always(function()
{
    // this gets always executed.
    // perform console.log(arguments) here to see what you get.
});
于 2012-09-20T15:46:32.977 回答