jquery impromptu - держать приглашение открытым до тех пор, пока не будет обработан асинхронный ответ AJAX

Вкратце
Я хочу сделать некоторую асинхронную проверку на стороне сервера (используя 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);
}

Пожалуйста помоги...

2 ответа

Вам нужно сделать небольшое изменение, просто добавьте еще один параметр async: false, где вы вызываете ajax, как показано ниже

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

}

больше информации: держите импровизированный "up", выполняя пост jjery Ajax/MVC

Ну, я не совсем уверен, что вы делаете, но используйте тот факт, что $.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.
});
Другие вопросы по тегам