jQuery Click - POST / GET возвращают успешное возвращаемое значение - PullRequest
1 голос
/ 09 ноября 2011

[name = AddClientSubmit] ... это кнопка «отправить» в форме.

$ .POST отправляет данные форм, а сценарий post возвращает ответ json с сообщением об ошибке.

Если сообщения об ошибке нет, я хочу вернуть функцию щелчка как true, чтобы форма отправлялась, и false при возникновении ошибки.

Проблема с моим сценарием ниже в том, что javascript не ожидает полного завершения $ .POST, и значение submitForm никогда не устанавливается, поэтому форма автоматически отправляется.

 $('[name="addClientSubmit"]').click(function() {
    var submitForm = false;
    var buttonObj = $(this);
    buttonObj.hide();

    $.post(
        '/jquery/scripts/contacts_clientAddEdit.php',
        $('#addClientForm').serialize(),
        function(json) {
            if(json.error == '') {
                submitForm = 'yes';
            } else {
                jAlert(json.error, 'Error', function() {
                    buttonObj.show();   
                });
                submitForm = 'no';  
            }
        },
        'json'
        );

        if(submitForm == 'yes') { return true; }
        if(submitForm == 'no') { return false; }
     });

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Вы можете добиться этого, изменив код следующим образом:

$('[name="addClientSubmit"]').click(function() {
var submitForm = false;
var buttonObj = $(this);
buttonObj.hide();

$.post(
    '/jquery/scripts/contacts_clientAddEdit.php',
    $('#addClientForm').serialize(),
    function(json) {
        if(json.error == '') {
            submitForm = 'yes';
            return true;
        } else {
            jAlert(json.error, 'Error', function() {
                buttonObj.show();   
            });
            submitForm = 'no';  
            return false;
        }
    },
    'json'
    );

});
1 голос
/ 09 ноября 2011

Проблема в том, что метод $ .post является асинхронным, поэтому он вернется до завершения отправки.Есть способ отключить это, но это заставляет браузер зависать и иногда вести себя с пользователем, как если бы он падал.

Вместо создания двух отдельных постов, одного для этой функциональности AJAX и одного для формыпочему бы не объединить их?Это решит вашу проблему и приведет к более быстрому времени отклика для пользователя.

...