1

私はこのコードを使用しようとしています:

$('#form1').on('submit', function(){
    var txtItemCode = $('#txtItemCode').val();
    $.post("userExist.php", {
        txtItemCode: txtItemCode,
    }, function(data,status){
        //alert("Data: " + data + "\nStatus: " + status);
        $('#status').html(data);    
        reply = data;
        //alert(reply);
    });
    alert('');
    if (reply=='OK'){
        return false;
    }
});

かどうかを確認data=="OK"して false を返す必要がありますが、を削除するalertと機能しなくなります。これはなぜですか、どうすれば機能させることができますか?

4

3 に答える 3

4

アラートを導入すると機能する理由は、アラートが実行を停止し、非同期呼び出しが完了するのに十分な時間を与えるためです。

ポスト リクエストが終了してコールバックが実行されるまでに、JavaScript の実行がすでに終了しているため、適切な値を取得できません。

ここにはいくつかのオプションがあります。

  1. グローバル変数を宣言し、同期呼び出しを実行します。ABC が投稿したコードを使用して実行するか$.ajaxSetup({ async: false })、POST 呼び出しの前に呼び出すことができます。戻り値をグローバル変数に割り当て、それに対して検証します。
  2. jQuery の ajaxStop を使用します。 $(document).ajaxStop(function() { //check your values here, still need to declare a global });
  3. 非表示の div に値を DOM の任意の場所に属性として書き込み、値が存在するまで定期的にチェックするタイマーを設定します。
于 2013-07-05T04:59:07.780 に答える
3

あなたのコードでは、ajax呼び出しは非同期で動作しているため、応答があるかどうかに関係なく、次の行が実行されます。同期呼び出しでは、応答が得られるまで次の行は実行されません。$.post から $.ajax になり、async プロパティを false にすることができます。その後、取得できるようになり、ajax 呼び出しが応答された後に「応答」の値を取得できます。

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType,
  async:false
});
于 2013-07-05T04:00:29.343 に答える
0

新しい考えが頭に浮かんだので、これをチェックしてください。

/**
 * form submit
 */
$('#form1').on('submit', function() {
    if (checkExistence()) {
        return false;
    }
});

/**
 * check existence in db
 * @returns {Boolean}
 */
function checkExistence() {
    var txtItemCode = $('#txtItemCode').val();
    var result = true;
    $.post("http://localhost/test.php", {
        txtItemCode: txtItemCode,
    }, function(data, status) {
        //alert("Data: " + data + "\nStatus: " + status);

        if (data == 'OK') {
            $('#status').html(data);
            result = true;
        } else {
            $('#txtItemCode').val('').focus();
            $('#status').html("Code is already existing, please provide another one:)")
            result = false;
        }
    });

    return result;
}

注: result と check の値を入れ替えることができます。

于 2013-07-05T06:59:01.630 に答える