keyup不起作用,不显示一个警报

时间:2013-03-12 17:29:20

标签: php jquery mysql keyup

我有一个文本字段类型的文本,当我输入一个盘子的数量时,如果它存在,它必须显示一个警报,但事件键盘不起作用。

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();  
?>

5 个答案:

答案 0 :(得分:2)

在php代码中,作业$_POST['matric']=$mat;应该颠倒

$mat = $_POST['matric'];

您的脚本也可能多次回显ok,具体取决于数据库中的数据,循环应该变为:

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

所以现在你可以用js回调和“ok”进行比较。

答案 1 :(得分:1)

我要解决这个问题,所以你不要像你设置的那样锤击你的后端。一个question on SO already deals with this

//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.
}

答案 2 :(得分:0)

您将要使用新的Promise interface 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/

答案 3 :(得分:0)

在php代码中创建一个退出语句,然后重试。

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

答案 4 :(得分:0)

在大多数情况下,id #mat在html代码中被定义了多次,密钥也可能有效,但是url可能不正确,并且它不会触发成功分支。除此之外,我看到$ _POST ['matric'] = $ mat;这不太对劲。可能你想要$ mat = $ _POST ['matric']。您可以使用firebug控制台检查javascript实际发生的事情以及php脚本返回的内容