2011-05-09 84 views
0

好了,所以我有這個功能PHP函數無法讀取jquery POST數據?

<?php 

/** 
* @author Mitchell A. Murphy 
* @copyright 2011 
*/ 
include ('func_lib.php'); 
connect(); 
echo (check($_POST['input']) ? 'true' : 'false'); 
function check($args) 
{ 
    $args = strtolower($args); 
    $checkemail = "/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i"; 
    if (preg_match($checkemail, $args)) 
    { 
     //logic for email argument 
     $sql = "SELECT * FROM `users` WHERE `email`='" . $args . "'"; 
     $res = mysql_query($sql) or die(mysql_error()); 
     echo "type=email:"; 
     if (mysql_num_rows($res) > 0) 
     { 
      return true; 
     } else 
     { 
      return false; 
     } 
    } else 
    { 
     //logic for username argument 
     $sql = "SELECT * FROM `users` WHERE `username`='" . $args . "'"; 
     $res = mysql_query($sql) or die(mysql_error()); 
     echo "type=username:"; 
     if (mysql_num_rows($res) > 0) 
     { 
      return true; 
     } else 
     { 
      return false; 
     } 
    } 

} 

?> 

功能應該由這個jQuery腳本訪問:

$('form.register .submit').click(validateRegister); 

function validateRegister() { 

    //Variables 
    var emailExists = false; 
    var userExists = false; 
    var $error = ""; 

    //Executes functions 
    email(); 


    function email() { 
     var $error = $('#email .error'); 
     var input = $('#email input').val(); 
     var emailRE = /^.*@.+\..{2,5}$/; 
     if (input.match(emailRE)) { 
      $error 
       .html('<div>Proper Email Format: <span>[email protected]</span></div>') 
       .animate({ 
       'left': '-130px', 
       'opacity': '0' 
      }); 

      //Checks for Existing Email 

      function checkExisting_email() { 
       $.ajax({ 
        type: 'POST', 
        url: 'includes/checkExist.php', 
        data: input, 
        statusCode: { 
         404: function() { 
          alert('page not found'); 
         } 
        }, 

        success: function (data) { 
         alert(data); 
        }, 
        error: function() { 
         alert("error bro"); 
        } 
       }); 

      } 
      emailExists = checkExisting_email(); 

      //If it exists 
      if (emailExists) { 
       alert("This email already exists!"); 
      } else if (emailExists == false) { 
       alert("Email doesnt exist!"); 
      } 

     } else { 
      //Email doesn't match 
      $error 
       .html('<div>Proper Email Format: <span>[email protected]</span></div>') 
       .animate({ 
       'left': '-150px', 
       'opacity': '1' 
      }); 
     } 
    } 
    return false; 
} 

但由於某些原因腳本(JS)不發送任何數據?如果是這樣,我該如何引用它。我是後端開發人員,但做了JavaScript的設計師讓我解決了這個問題。我知道PHP的作品,因爲我做了一個測試的形式與這個HTML標記發送數據:

<form action="includes/checkExist.php" method="post"> 
<input type="text" name="input" /> 
<input type="submit" name="submit" /> 
</form> 

這工作...那麼,爲什麼是jQuery的返回爲NULL輸入?

回答

1

看到checkExisting_email()不返回任何東西,所以emailExists = checkExisting_email();不會設置emailExists。此數據僅在回調函數中提供,該函數僅在alert()上顯示結果。

爲了方便起見,請使用jQuery ajax驗證字段remote。檢查documentation and sample

1

您需要爲「數據」傳遞鍵/值對,而不僅僅是值。

原樣,你的表格是要與查詢字符串看起來像這樣貼:

[email protected] 

它應該是:

數據:{輸入:輸入},

這將將查詢字符串設置爲:

[email protected] 

另外,由於您正在將值一個按ID的元素,你不需要指定輸入標籤。

var input = $('#email').val(); 
+0

謝謝:)我有一點之前,但這會幫助我,我沒有:P – 2011-05-09 21:21:48