2013-10-03 29 views
1

我是一个JQuery/JS newb,并且遇到了简单的.blur()事件调用问题。HTML表单模糊JQuery函数调用PHP

基本上我有一个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> 

validate.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!"); 
       } 

     }); 
    }); 
}); 

validate.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,”to'data:“cat =”+ document.querySelector ( '[NAME = “类别”]')。“在js文件,并引用 “$ _ POST值,[ '猫']” 中的PHP文件

+0

现在的代码删除警报后的作品!我之前正在测试它,并没有外部的$(document).ready函数,直到我有了警报之后,谢谢你们! – bnunamak

回答

0

有几件事情,我注意到,你的alert函数调用不应该放在在您的ajax调用的选项对象中 - ajax调用期望它的选项被定义为key : value pairs - 如果您想设置ajax函数已被调用的警报,您可以将它放在beforeSend回调中 - 在XmlHttpRequest之前触发已发送。所以,如果你正在使用的ID =在多个表单输入的“验证”

$(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属性应该是唯一的那个文件,:该代码会是这个样子页面将不会有效html - 尝试将选择器更改为类名称,然后调用您的模糊函数,如下所示$('.validate').blur(function() ...

此外,成功回调仅表示XmlHttpRequest已完成,并未指示哪些数据已被服务器返回,因此提醒该类别存在,因为请求已完成可能会给你一个误报,更好的方法是使用alert(msg)里面你的成功回调。

这里的链接到查询的文档上$.ajax应明确几个东西给你:

+0

谢谢!掌握最佳实践信息总是很好的 – bnunamak

0

在你的代码,

alert("Called!!"),

放错了位置。

请删除它。因为$.ajax()函数只需要键值对。

alert是功能。

您可以将它放在successerror函数中。

+0

谢谢!这有很大的帮助,但我也想知道为什么什么都没有发生(这就是为什么我把警报放在第一位,看看它是否被调用) – bnunamak

+0

在Mozilla Firebug中进行调试。检查网络选项卡是否正在进行服务器请求。 – Pupil

0

第一个问题我看到的是在对象的警报()调用传递给阿贾克斯(),这是无效的,并会引发错误

+0

非常感谢! – bnunamak