jquery.ajax()processData - 设置为false,仍然将表单数据附加到url - 以及其他问题

时间:2012-06-04 00:34:38

标签: php javascript jquery ajax

所以我试图学习一些用于访问mysql数据库的表单中的jquery,这里是表单:

<form class="loginform" id="loginform" name="loginform">
    <input type="email" id="login" name="login" placeholder="Login..." autofocus required /><br/>
    <input type="password" id="password" name="password" placeholder="Password..." required /><br/>
    <input type="submit" id="loginsubmit" name="loginsubmit" value="LOGIN"/><br/>
    <input type="submit" id="register" name="register" value="REGISTER"/><br/>
</form><!-- end loginform -->

我有一个JS函数并使用$.submit()函数,并通过定义为$.submit()参数的函数调用$.ajax(),如下所示:

function validateLogin(){
  $('#loginform').submit(function() {      
    $.ajax({
      url: "./validateLogin.php", 
      processData: false,
      data: {
        login: $("#login").val(), 
        password: $("#password").val()
      }, 
      success: function (result){
        alert($('#login').val());
        alert(result);
      }
    });
  });
}

注意读取processData: false,的行 最后这里是url设置中$.ajax()方法调用的php脚本:

<?php
$verified = FALSE;
$login = $_POST["login"];
$password = $_POST["password"];

$con = mysql_connect(host, user, pass) or die(mysql_error());
mysql_select_db(db, $con) or die(mysql_error());

$result = mysql_query("SELECT * FROM logins") or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
  if ($row[login] == $login) {
    $verified = TRUE;
  }
}
?>

<html>
    <body>
        <?php echo($verified); ?>
    </body>
</html>

有些东西不起作用,除了将表单数据附加到url之外我无法做任何事情(在提交后,url看起来会像这样:http://localhost/index.htmlqlogin=aloginname&password=apassword&login=LOGIN,它是还会因为某种原因将我的提交按钮的名称:值对添加到查询字符串中,并且我从阅读HERE (see the data setting)了解到processData: false这个甚至不应该发生。

此外,我无法让success: function()触发警报(我也尝试在beforeSend: function()中发出警报,但也不会触发。

我有点理解jQuery但不完全是我对它相对较新,但我对我编写的代码的理解是在JS函数中我将一个事件处理程序附加到表单(? - not表单的一个元素,并且在该事件处理程序将执行的函数中,我正在调用$.ajax()方法,该方法将数据发送到url并成功完成该处理中定义的函数success:方法的$.ajax()设置。然后在我的php脚本中我连接到mysql,查询它,检查表单中的登录是否与db中的条目匹配,如果它确实将布尔值更改为true,最后布尔值的值在内部回显<html>标记,但我不确定如何显示该html数据。

简而言之,这就是我的问题。任何指导将不胜感激! 如果我误解了上述过程的任何内容,请随时纠正我。再次感谢。

2 个答案:

答案 0 :(得分:0)

有几点需要注意。

1-确保路径 ./ validateLogin.php 是正确的。

2-我不知道你是否已经这样做了,但如果你不使用Firebug,那么在开发网站时,最酷的插件就是用来调试的。它将为您节省数小时的工作量并帮助您解决涉及javascript的错误。

3- ajax最常见的用途是发布或带来数据。任一简单的字符串,如 “完成” 或 “错误”,或串行化的数据等的 JSON 。(参见<强> JSON < /强>)。如果需要输出数组或对象,请在PHP中使用 json_encode 函数。

以下是一些代码供您试用,它对我有用。

在PHP方面

   $result = mysql_query("SELECT * FROM logins") or die(mysql_error());
   while ($row = mysql_fetch_array($result)) {
       if ($row[login] == $login) { 
         $verified = TRUE;
       }
   }
   if ($verified){
        echo 'TRUE';  // This could be anything you want, an array, an object, numbers or a string
   }else{
        echo 'FALSE';
   }

在Javascript方面

$(document).ready(function(){ // Everything is encapsuled in the ready function in order to wait for the page to load completely.
    $.ajax({
        url: './validateLogin.php', 
        type: 'POST',
        success: function(result){

            if(result == 'TRUE'){
                alert('Verified!');                         
            }else{
                alert('Not verified!');                             
            }

        }
    });
});

我知道你也试图输出和标签,但请记住,javascript和ajax意味着平滑地改变存在布局。所以你真的不想在你的请求中带来大量的HTML代码。您应首先使用HTML和PHP准备布局,然后仅使用javascript和ajax来提供您需要动态更改的重要数据或内容。

答案 1 :(得分:0)

//hey try to use this server side php script

$logins = $_POST['login'];
$password = $_POST['password'];

$sqlquery = mysql_query("SELECT * FROM logins WHERE logins=$logins AND password=$password");
$numrow = mysql_num_rows($sqlquery);//check if exists or not

if($numrow > 0){
$verified =  "TRUE";
}
else{
$verified = "FALSE";
}
echo json_encode(array('verified'=>$verified));// echo out with json encode
//JS

$(document).ready(function(){
$("#loginbtn").click(function(){
$.ajax({
      type:'post',
      url:'validatelogin.php',
      data: {login: $("#login").val(), password: $("#password").val()},
      dataType:'json',
      success:function(data){

             alert(data.verified);
      }
});     
});

});