0

私は 1 つのテキストフィールド タイプのテキストを持っています。プレートの番号を入力しているときに、存在する場合は 1 つのアラートを表示する必要がありますが、イベント キーアップは機能しません。

JS

$('#mat').keyup(function(){
        var matric = $('#mat').val();
        $.ajax({type: "POST",
                     url: "compruebaVeh.php",
                     data: "matric="+matric,
                     success:function(data) {
                         alert(data);
                         if(data=='ok'){
                             alert('this car already exists');
                         }
                     }
        });  
    });

PHP

<?php

 $mat=$_POST['matric'];
 ini_set('display_errors',1); error_reporting(E_ALL);
 require('conecta.php');
 $cSQL="select matricula from vehiculos;";
 $stmt=$oConni->prepare($cSQL) or die($oConni->error);
 //$stmt->bind_param('s',$_POST['matric']);
 $stmt->execute();
 $stmt->bind_result($matricula);
 while ($stmt->fetch()) {
    if($matricula==$mat){
        echo 'ok';
    }
 }   
 $stmt->close();  
?>
4

5 に答える 5

2

PHPコードでは、割り当て$_POST['matric']=$mat;を逆にする必要があります

$mat = $_POST['matric'];

okまた、DB のデータによっては、スクリプトが何度もエコーする場合があります。ループは次のようになります。

while ($stmt->fetch()) {
    if($matricula==$mat){
        echo 'ok';
        break;
    }
 }  

これで、js コールバックで「ok」と比較できるようになりました。

于 2013-03-12T17:32:41.327 に答える
1

これを修正して、これが設定されているようにバックエンドを叩かないようにします。SOに関する質問はすでにこれを扱っています

//setup before functions
var typingTimer; //timer identifier
var doneTypingInterval = 1000; //time in ms, 1 second for example

var licenceSearch = $("#mat");

//on keyup, start the countdown
licenceSearch.keyup(function () {
    clearTimeout(typingTimer);
    if (licenceSearch.val) {
        typingTimer = setTimeout(doneTyping, doneTypingInterval);
    }
});

//user is "finished typing," do something
function doneTyping() {
    alert(licenceSearch.val());

    // ajax stuff can happen here.
}
于 2013-03-12T17:49:52.173 に答える
0

PHPコードでexitステートメントを作成し、再試行してください。

while ($stmt->fetch()) {
    if($matricula==$mat){
        echo 'ok';
    }
 }  
exit; 
于 2013-03-12T17:34:39.457 に答える
0

次のように、新しいPromise インターフェイスJQuery メソッドを使用する必要があります。

$('#mat').on('keyup', function (event) {

    var matric = $(event.target).val();

    var response = $.post("compruebaVeh.php", {data: matric});

    response.done(function (data) {
        alert(data)
    });

    response.fail(function () {
        alert('error')
    });

});

これは実際のキーアップ フィドルの例です: http://fiddle.jshell.net/vHTZN/

于 2013-03-12T17:31:54.213 に答える
0

ほとんどの場合、id #mat が html コードで複数回定義されており、keyup は機能する可能性がありますが、URL が正しくない可能性があり、成功ブランチをトリガーしません。それ以外には、$_POST['matric']=$mat; が表示されます。これは正しくありません。おそらく、$mat = $_POST['matric'] が欲しかったのでしょう。firebug コンソールを使用して、javascript で実際に何が起こるか、および php スクリプトが何を返すかを確認できます。

于 2013-03-12T17:37:00.643 に答える