jQuery - Resume form submit after ajax call

前端 未结 3 1609
萌比男神i
萌比男神i 2020-12-05 22:02

Is it possible to stop a form from submitting and then resubmitting the same form from within the success of an ajax call?

At the moment it gets to the success bit b

相关标签:
3条回答
  • 2020-12-05 22:30

    Solution was quite simple and involved adding and setting async to false in .ajax(). In addition, I have re-worked the code to work of the submit button instead which submits the form when the AJAX passes successfully.

    Here is my working code:

    $(document).ready(function() {
        var testing = false;
        $('#btn-login').on('click', function() {
            $.ajax({
                url: $('form').attr('action'),
                type: 'post',
                data: $('form').serialize(),
                async: false,
                success: function(data) {
                    if (data == 'true')
                    {
                        testing = true;
                        $('form').attr('action', 'https://example.com');
                        $('form').submit();
                    }
                    else
                    {
                        alert('Your username/password are incorrect');
                    }
                },
                error: function() {
                    alert('There has been an error, please alert us immediately');
                }
            });
    
            return testing;
        });
    });
    
    0 讨论(0)
  • 2020-12-05 22:39

    It's no good practice to reselect all form tags throughout your code, what if you have multiple forms on the page? Also you'd better use .on() and .off() with jQuery.

    $(document).ready(function() {
        $('form').on('submit', function(e) {
            e.preventDefault();
    
            // cache the current form so you make sure to only have data from this one
            var form = this,
                $form = $(form);
    
            $.ajax({
                url: form.action,
                type: form.method,
                data: $form.serialize(),
                success: function(data) {
                    if (data == 'true')
                    {
                        $form.attr('action', 'http://example.com').off('submit').submit();
                    }
                    else
                    {
                        alert('Your username/password are incorrect');
                    }
                },
                error: function() {
                    alert('There has been an error, please alert us immediately');
                }
            });
        });
    });
    
    0 讨论(0)
  • 2020-12-05 22:52

    In one line you use $('form') to select the form to change its action, but then you use $(this) to try to select that same form. I would guess that this inside the callback function isn't what you expect it to be, and is something other than your form (possibly the window object).

    Just chain the calls:

    $('form').attr('action', 'http://example.com').unbind('submit').submit();
    
    0 讨论(0)
提交回复
热议问题