Javascript jqueryajax:输入的意外结束

Javascript jqueryajax:输入的意外结束,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我正在尝试使用AJAX检查输入值。每次用户按下一个键,AJAX就会被发送,然后根据服务器的结果,我将有效或无效的类添加到输入中 .js: PHP代码: if(isset($_POST['toCheck']) && isset($_POST['content']) && $_POST['toCheck'] != "" && $_POST['content'] != "") { require_once 'classes/AAA.php

我正在尝试使用AJAX检查输入值。每次用户按下一个键,AJAX就会被发送,然后根据服务器的结果,我将有效或无效的类添加到输入中

.js:

PHP代码:

if(isset($_POST['toCheck']) && isset($_POST['content']) 
   && $_POST['toCheck'] != "" && $_POST['content'] != "")
{
    require_once 'classes/AAA.php';
    require_once 'classes/Database.php';
    require_once 'etc/settings.php';

    $db = new Database($GLOBALS['db_server'],$GLOBALS['db_name'],$GLOBALS['db_user'],$GLOBALS['db_pass']);
    $aaa = new AAA($db);

    switch($_POST['toCheck'])
    {
        case 'email':
            $output['result'] = $aaa->isUsableEmail($_POST['content']);
            $output['toCheck'] = 'email';
            break;
        case 'username':
            $output['result'] = $aaa->isUsableUsername($_POST['content']);
            $output['toCheck'] = 'username';
            break;
        default:
            $output['result'] = 'error';
            break;
    }

    echo json_encode($output);
}
奇怪的是,当我按下任何字符键时,一切都正常工作。但当我按“Tab”切换到另一个输入时(该输入使用相同的功能,但不返回任何错误-当我按Tab时也是如此!)会出现以下错误:

Uncaught SyntaxError: Unexpected end of input b.extend.parseJSON
jquery-1.9.1.min.js:3 afterAJAXResponse
registration.php?school_id=1&department_id=1:189 b.Callbacks.c
jquery-1.9.1.min.js:3 b.Callbacks.p.fireWith jquery-1.9.1.min.js:3 k
jquery-1.9.1.min.js:5 b.ajaxTransport.send.r

提前感谢您的回复。

我假设您不想在按下tab键时调用ajax函数。但是,您没有检查它,并且
keyup
也会捕获选项卡单击事件

您应该更改:

$("input[name=username]").keyup(function(event) {
    processAJAXCheck(this,"username");
});
例如:

$("input[name=username]").keyup(function(event) {
  if (event.keyCode !== 9) {    // I think it's 9...
    processAJAXCheck(this,"username");
  }
});

您还可以添加enter-
13
——例如。

您可以检查Jeroen描述的密钥代码(这将为您节省对服务器的调用),或者在post检查结果为false时从php脚本返回空数组(json编码)。

谢谢大家的建议

最后,将数据类型添加到$.AJAX()中有帮助!我在AJAX调用中添加了数据类型:“json”,并从回调中删除了.parseJSON(),我不再遇到任何错误


再次感谢@ADASein

添加数据类型:“json”我认为这不会导致代码出现问题,但您应该使用
var
声明局部变量,例如
var contentOfInput=…
@ADASein如果他这样做,他必须删除对
$.parseJSON
的显式调用。查看DevTools/Firebug的网络选项卡中的响应,确保它是有效的JSON。我的第一反应是Ajax调用没有导致任何错误,但没有返回JSON响应。您可以在浏览器中检查哪些数据正在发布到服务器。我猜您的php脚本中的if语句被计算为false,并且没有返回任何内容。您是对的,我没有对php进行足够的检查,以确保如果不满足第一个条件,则不会返回任何内容。不管使用我的解决方案,这都应该做到。@jeroen最后,Honza现在有足够的选项/指针来解决客户端和服务器端的问题:)。我不介意是否在“TAB action”上检查它,因为它虽然会被.change listener检查。我只是想避免这个错误。
$("input[name=username]").keyup(function(event) {
  if (event.keyCode !== 9) {    // I think it's 9...
    processAJAXCheck(this,"username");
  }
});