1

我是一个 JQuery/JS 新手,并且在使用简单的 .blur() 事件调用时遇到了麻烦。

基本上,我有一个 html 表单,其输入具有“id='validate'”,应该调用 php 脚本来验证在数据库中表单的输入元素中输入的内容是否存在。

任何帮助将不胜感激!

目前我收到错误消息:“SyntaxError: missing : after property id @ line 6”[at 'alert("Called!!"),'],但如果我将其注释掉,则什么也不会发生。

HTML:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src='../js/validate.js'></script>
<!DOCTYPE html>
<html>
...
<body>
...  
<form method="POST" action="upload.php?t=0" class="formbox" style="float:left;" name='aform'>
    <label>Category: </label><input type="text" id='validate' maxlength="30" name="category"/><br />

    <input style="margin-left:35%;width:130px;" type="submit" value="Submit Article" />                     
</form>
...
</body>
</html>

验证.js:

$(document).ready(function(){
    $('#validate').blur(function(){
        $.ajax({

                type: "POST",
                url: "../php/validate.php",
                data: aform.elements["category"].value,
                success: function(msg){
                    alert("Category exists!");
                },
                error: function(){
                    alert("Error!");
                }

         });
    });
});

验证.php:

<?php
    include '../php/db.php';
    echo "Called!";

    $cat = mysqli_real_escape_string($con, $_POST['category']);

    $query = mysqli_query($con, "SELECT DISTINCT * FROM Category WHERE Name='".$cat."';");

    if(mysqli_num_rows($query) == 1){
        echo "Category Exists!";
    }else if(mysqli_num_rows($query) == 0){
        echo "No Category with that name found!";
    }else{
        echo "Too many Categories found!";
    }
?>

提前致谢!

编辑:为了将来参考,我在引用 POST 数据时遇到了麻烦,我最终将“data:aform.elements["category"].value" 更改为 'data:"cat="+document.querySelector('[name = "category"]').value,' 在 js 文件中并在 php 文件中引用 "$_POST['cat']"

4

3 回答 3

0

我看到的第一个问题是传递给 ajax() 的对象中的 alert() 调用,这是无效的并且会引发错误

于 2013-10-03T13:03:55.020 回答
0

我注意到一些事情,你的alert函数调用不应该放在你的 ajax 调用的选项对象中——ajax 调用期望它的选项被定义为key : value pairs——如果你想设置一个 ajax 函数已被调用的警报,你可以将它放在beforeSend回调中 - 在发送 XmlHttpRequest 之前触发。代码看起来像这样:

$(document).ready(function(){
$('#validate').blur(function(){
    $.ajax({

            beforeSend: function() { alert("Called!!"); },
            type: "POST",
            url: "../php/validate.php",
            data: aform.elements["category"].value,
            success: function(msg){
                alert("Category exists!");
            },
            error: function(){
                alert("Error!");
            }

     });
});
});

另外作为旁注,html 元素的 id 属性对于该文档应该是唯一的,因此如果您在页面上的多个表单输入上使用 id="validate" ,则该页面将不是有效的 html - 尝试更改您的选择器改为类名并像这样调用你的模糊函数$('.validate').blur(function() ...

此外,成功回调仅表示 XmlHttpRequest 已完成,没有指示服务器返回了哪些数据,因此由于请求已完成而提醒类别存在可能会给您一个误报,更好的方法是alert(msg)在您的成功回调中使用。

这是$.ajax上查询文档的链接,它应该为您清除一些事情:

于 2013-10-03T13:07:45.277 回答
0

在您的代码中,

alert("Called!!"),

错位了。

请删除它。

由于$.ajax()函数只需要键值对。

并且alert是函数。

您可以将其放入successerror运行。

于 2013-10-03T13:00:27.270 回答