2011-08-12 9 views
1

このスレッドから新しい問題が発生しました:jquery form validator never makes ajax call、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はFirebugによると"invalid_old"を格納しています。ただし、コードは常にが最後のelseステートメントにジャンプします。比較が常に失敗するのはなぜですか?

+2

コールバックでブレークポイントを作成し、表現 'データ==「invalid_old」'のための時計を設定してみてください。それは何と言いますか?私はそれが間違ったケースか、時には見るのが難しいようなものかもしれないと思う。 – FishBasketGordo

+1

サーバが '' invalid_old ''の後に改行を返している可能性があります。チャールズ・プロキシの試用版(ajaxで作業しているならindespensibleツール)をダウンロードして、サーバーから返されたデータの16進表示を確認してください。 –

+0

私はCharlesのプロキシを使用していませんでしたが、validate.phpに 'trim'関数を追加して、問題を修正しました。すべての助けをありがとう! –

答えて

0

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 
    } 
} 
+0

正確に何をしたのか知っているといいですね。 – nottinhill

+0

@StephanKristynこれは私が使ったコードだと思います。私はもはやこのコードベース(別の職場)にアクセスすることはできませんが、これは私が使用したものだと思います。 –

+0

@StephanKristyn私の編集で必要な情報が追加されましたか? –

1

返品内容を確認するには、一時的に小切手の上にalert(data.toString());を入れてみてください。文字列自体でない場合は、期待しているデータが返されません。示すように、jQueryのtrim機能は、問題を修正追加、コメントで述べたように

関連する問題