как запретить jquery проверять и отправлять данные одновременно - PullRequest
0 голосов
/ 23 июня 2011

моя команда получила задание создать систему, которая будет служить программным прототипом для нашего следующего проекта, который будет разработан с использованием codeigniter и jquery. Так как я новичок в веб-программировании, мне нужно время, чтобы решить проблемы. и следующий код мучил меня в течение двух дней.

$(function() {
var bln_valid = true;

$('#btn_save').click(function() {
    $('.warning-label').html('');


    if ($('#txt_customer_code').val() == '') {
        // did user provide customer code?
        $('#lbl_customer_code').html('Customer Code has to be filled in.');
        bln_valid = false;
    } else {
        // is the code unique?
        $.post('<?php echo base_url()."index.php/customer/is_code_exists" ?>', {
            txt_customer_code   : $('#txt_customer_code').val()
        },
        function(data) {
            if(data.error == undefined) {
                if (data['code_exists'] == 1) {
                    $('#lbl_customer_code').html('Customer Code is not available.');
                    bln_valid = false;
                }
            } else {
                $('#lbl_customer_code').html('Customer Code is not available.');
                bln_valid = false;
            }
        },'json'
        );                      
    }   

    if (bln_valid == false) {
        return false;
    } else {
        // insert the code to database
        $.post('<?php echo base_url()."index.php/customer/add" ?>', {
            txt_customer_code   : $('#txt_customer_code').val(),
        },
        function(data) {
            if(data.error == undefined) {
                $('#lbl_customer_code').html(data['key']);
                if (data['key'] == '') {
                    $('#lbl_customer_code').html('Failed Saving.');
                    return false;
                } else {
                    $('#lbl_customer_code').html('Successfully saving.');
                }
            } else {
                $('#lbl_customer_code').html('Failed Saving.');
                return false;
            }
        },'json');                      
    }                   
});});

, поэтому я хочу проверить уникальность кода клиента, прежде чем вставить его в базу данных. но кажется, что код проверки и вставки, оба с использованием ajax, выполняются почти одновременно. bln_valid по-прежнему сохраняет свое значение TRUE, когда вставка начинается, хотя код клиента не уникален.

  1. есть ли способ разрешить запуск кода вставки после завершения проверки? я прочитал об очереди в jquery, но не смог понять концепцию и применить ее для решения своей проблемы.
  2. существует ли более эффективный метод для достижения цели проверки и представления данных?

Я стараюсь не использовать никаких плагинов, потому что мне сказали, чтобы использование любых внешних работ было как можно меньше.

спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 23 июня 2011

Jquery имеет множество плагинов для отправки и проверки ajax.Вместо того, чтобы писать свою собственную логику, вы можете рассмотреть возможность их использования.Я рекомендую

  1. Плагин формы Jquery - который отправляет форму через ajax.Удалите отправить, сделайте кнопку, которая по клику отправляет форму через ajax.

  2. Плагин Jquery Validation - который проверяет все на основе класса.Вы даже можете написать свою собственную логику, используя метод .addValidator.

Рабочий пример здесь

0 голосов
/ 23 июня 2011

Попробуй Event.PreventDefault() ?

...