Как отправить сообщение с JQuery OnSubmit, но все еще отправить форму - PullRequest
1 голос
/ 11 июня 2011

Я хочу вызвать эту функцию, которая использует метод post jquery, при отправке формы:

function update_point_session(){
    $.post('/update_point_session/', 
           {session: true},
           function(data){}
    );
    return true;
}

Я использую onsubmit для ее запуска.

Проблемаявляется то, что он не будет отправлять его при отправке формы.Но если я return false; это сделаю (хотя сама форма, конечно, не будет).Похоже, что $.post не отправляется до того, как страница перенаправляется на другую по форме ..

Так что я думаю, что мне как-то нужно return true; ПОСЛЕ $.postЯ попытался сделать это, поместив его внутрь function(data){}, но это не сработало ..

Как я могу отправить ОБА сообщение из jquery и из формы?

Ответы [ 3 ]

3 голосов
/ 11 июня 2011

Есть пара вещей, которые вы можете сделать.

Сделать AJAX синхронным

Так как $.post есть, согласно документации , эквивалентно

$.ajax({
    type: 'POST',
    url: url,  
    data: data,
    success: success  
    dataType: dataType
});

Вы можете просто заменить $.post эквивалентным вызовом $.ajax, а также добавить async: false к опциям. Это отправит форму с AJAX, а затем, из-за return true; из функции, также позволит браузеру опубликовать форму в обычном режиме.

Отправка формы только после завершения AJAX

Это включает в себя некоторые манипуляции с обработчиками событий:

// attach submit event handler to the form
$("#myform").submit(function() { 
    // Handler immediately detaches itself, so that
    // we don't have an infinite loop when we call
    // $(this).submit() ourselves below
    $(this).unbind('submit');

    // Do the AJAX
    $.post(
        '/update_point_session/', 
        {session: true},
        function(data){
            // When the AJAX completes, tell the browser
            // to re-submit the form
            $(this).submit();
        }
    );

    // Prevent the browser from submitting it NOW,
    // because the AJAX is still running
    return false;
});
0 голосов
/ 11 июня 2011

Я бы сделал что-то подобное.

$('form#myFormId').submit(function(evt){
    var form = $(this);
    evt.preventDefault(); // Prevents default submission
    $.post('/update_point_session/', {session: true}, function(data){
        form.unbind('submit'); //Unbind js submit event
        form.get(0).submit(); //submit the form
    });
});
0 голосов
/ 11 июня 2011

Вы должны дождаться завершения асинхронного сообщения, прежде чем выгружать страницу. Вы можете отправить URL-адрес перенаправления с сервера как json примерно так:

$('form').submit(function(e){
    $.post(this.action || '/update_point_session/', $(this).serialize(), function(data){
        // send back a redirect url from the server
        if(data.url) location.href = data.url;
    });
    e.preventDefault()
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...