2013-10-03 59 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