данные, возвращаемые из ajax, всегда терпят неудачу в == сравнении? - PullRequest
1 голос
/ 12 августа 2011

В этом потоке возникла новая проблема: Средство проверки формы jquery никогда не выполняет вызов ajax , поскольку данные, возвращаемые из запроса ajax, точны, но при сравнении всегда терпят неудачу.Это код, который делает запрос ajax:

var pass_form = $('#pass_form');
pass_form.submit( valid_pass_sett );

function valid_pass_sett() {
    //remove old errors - snipped
    pass_old = $('input[name=pass_old]').val();
    pass_new = $('input[name=pass_new]').val();
    pass_confirm_new = $('input[name=pass_confirm_new]').val();

    if (pass_old === "") {
        //display error on form - snipped
        return false;
    } else if (pass_new === "") {
        //display error on form - snipped
        return false;
    } else if (pass_new != pass_confirm_new) {
        //display error on form - snipped
        return false;
    } else if (pass_new.length < 8) {
        //display error on form - snipped
        return false;
    } else {
        $.post("http://www.example.com/ajax/validate.php",{ // async validation
            type: 'valid_old_change_pass', 
            pass_old: pass_old,
            pass_new: pass_new
        }, valid_pass_combo_callback);
        alert('after the ajax call...');
    }
    return false;  // cancel form submission
}

это код, в который отправляется запрос:

$username = $_SESSION['username'];
$pass_old = $_POST['pass_old'];
$pass_new = $_POST['pass_new'];
if (empty($pass_old) || empty($pass_new)) {
    echo "invalid";
} else if (!User::valid_user_pass($username, $pass_old)) {
    echo "invalid_old";
} else if (!Sanitize::is_legal_password($pass_new)) {
    echo "invalid_new";
} else {
    echo "valid";
}

, и это функция обратного вызова, которая его обрабатывает;функция обратного вызова - та, где сравнение всегда терпит неудачу.

function valid_pass_combo_callback( data ) {

//breakpoint is set here
    if (data == 'valid') {
        //only if the form is valid!
        pass_form[0].unbind('submit').submit();
    }
    else if (data == "invalid_old") {
        //display error on form - snipped
    }
    else if (data == "invalid_new") {
        //display error on form - snipped
    }
    else {
        //it always jumps to here..., even though data *is* the correct value
    }
}

Я отладил этот код, и validate.php возвращает "invalid_old", что является правильным (на основе вводимых тестовых данных).Итак, data хранит "invalid_old" согласно Firebug;однако код всегда переходит к последнему оператору else.Почему сравнение всегда терпит неудачу?

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Попробуйте временно разместить alert(data.toString()); над чеками, чтобы увидеть, что он возвращает. Если это не сама строка, то она не возвращает ожидаемые данные.

0 голосов
/ 17 ноября 2011

Как указано в комментарии, добавление функции JQuery trim устранило проблему, как показано:

function valid_pass_combo_callback( data ) {
    trimmed_data = $.trim(data);
    if (trimmed_data == 'valid') {
        //only if the form is valid!
        pass_form[0].unbind('submit').submit();
    }
    else if (trimmed_data == "invalid_old") {
        //display error on form - snipped
    }
    else if (trimmed_data == "invalid_new") {
        //display error on form - snipped
    }
    else {
        //it always jumps to here..., even though data *is* the correct value
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...