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.
});