$ .ajax发布请求不发送POST数据

时间:2010-12-09 16:34:53

标签: php javascript jquery ajax post

我正在尝试通过使用ajax来处理返回并向服务器发出请求来简化我的登录系统。我想将表单数据发布到PHP页面,然后返回true / false和“Not Enough Data”,如果没有传递正确的参数。

我的问题是我的AJAX请求没有发送我要发送的数据。

这是我的JavaScript函数:

function confirm_login()
{
   val_UName = document.login_form.username.value;
   val_Pwd = document.login_form.password.value;

   var result = null;
   var scriptUrl = "login_confirm.php";
   $.ajax({
     url: scriptUrl,
     type: 'post',
     data: ({username : val_UName, password : val_Pwd}),
     dataType: 'html',
     async: false,
     success: function(data) {
         result = data;
     }
   });
   result = result.split('|');
   if(result[1] == 'true')
     window.location = "index.php";
   else
     alert('Could not log you in!\n\n'+result[0]);
}

在窗体上的提交按钮的onclick事件中调用此函数。现在,我已经在Chrome中使用了调试工具,我知道val_UName和val_Pwd正在获取表单值。所以这肯定是这里和login_confirm.php之间的细分

为了完整起见,这是在login_confirm.php中发生的事情(我省略了连接到数据库并关闭连接的行):

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

if($username == '' || $password == '')
      echo 'Not Enough Data|';

$login_query = "SELECT * FROM users WHERE u_name = '$username' AND pwd = '$password'";
$result = mysql_query($login_query);
$result_rows = mysql_num_rows($result);

if($result_rows > 0)
{
   session_start();
   $row = mysql_fetch_assoc($result);
   $_SESSION['loggedin'] = true;
   $_SESSION['uname'] = $row['u_name'];
   $_SESSION['uID'] = $row['pkid'];
   $_SESSION['email'] = $row['email'];
   $_SESSION['roleID'] = $row['fk_roleid'];
   echo 'true';
}
else
{
   echo 'false';
}

任何人都知道这里发生了什么或者之前看过这样的事情吗?

PS。我甚至尝试过更改为使用GET,但仍然无效...

3 个答案:

答案 0 :(得分:4)

   result = result.split('|');
   if(result[1] == 'true')
     window.location = "index.php";
   else
     alert('Could not log you in!\n\n'+result[0]);

在回调返回之前运行。

尝试将该逻辑放在成功回调中,或者在里面定义具有该逻辑的成功函数。

答案 1 :(得分:2)

ajax请求下的代码不会等待ajax请求在执行之前完成。所以我认为你的ajax请求正在运行,但数据没有任何反应,因为这段代码已经执行了。

我的建议是:

function confirm_login()
{
   val_UName = document.login_form.username.value;
   val_Pwd = document.login_form.password.value;

   var scriptUrl = "login_confirm.php";
   $.ajax({
     url: scriptUrl,
     type: 'post',
     data: ({username : val_UName, password : val_Pwd}),
     dataType: 'html',
     async: false,
     success: function(data) {
         runCode(data);
     }
   });

   function runCode(var result){
      result = result.split('|');
      if(result[1] == 'true')
        window.location = "index.php";
      else
        alert('Could not log you in!\n\n'+result[0]);
      }
   }
}

编辑:功能不应该与其他功能相同,但我认为你可以自己修复。

答案 2 :(得分:0)

不要将数据包装在括号中。只需{}即可。