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

Posted

技术标签:

【中文标题】$.ajax Post 请求不发送 POST 数据【英文标题】:$.ajax Post Request not sending POST data 【发布时间】:2011-05-22 23:43:30 【问题描述】:

我正在尝试通过使用 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,但还是不行……

【问题讨论】:

如果 $username 或 $password 变量为空字符串,我的 PHP 页面只会返回“Not Enough Data”,所以没有。 拿起名为 Fiddler 的工具。它将让您查看所有调用的请求数据和响应数据。在请求数据中看到的任何结果都将确认 PHP 页面正在接收什么。 【参考方案1】:
   result = result.split('|');
   if(result[1] == 'true')
     window.location = "index.php";
   else
     alert('Could not log you in!\n\n'+result[0]);

在回调返回之前运行。

尝试将该逻辑放入成功回调中,或定义一个包含该逻辑的成功函数。

【讨论】:

OP 设置async: false,所以实际上它应该可以工作,不是吗? @felix 在这种情况下他真的不应该运行 async false 。我相信 async false 用于将 Ajax 请求排队并按顺序处理它们。否则,回调将被乱序调用。仅在绝对必要时才使用 async false。 是的,我知道它是邪恶的;)但是,我仍然认为它会产生调用后的代码在调用返回后执行的效果。无论如何,我从未使用过 async: false 所以这可能是我不知道的原因;)【参考方案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]);
      
   

编辑:函数不应该在另一个函数中,但我认为你可以自己解决这个问题。

【讨论】:

【参考方案3】:

不要将数据括在括号中。只需 就足够了。

【讨论】:

检查 jquery api:api.jquery.com/jQuery.ajax 他们使用括号,他们非常好。 很公平 - 我从未见过。 这对我来说也很奇怪,必须查一下以确保它有效。

以上是关于$.ajax Post 请求不发送 POST 数据的主要内容,如果未能解决你的问题,请参考以下文章

JQuery Ajax 请求不通过 post 变量发送

AJAX---发送POST请求

ajax中,发送请求的类型

Ajax中get请求和post请求

IT兄弟连 JavaWeb教程 使用AJAX发送POST请求并获取响应

Laravel 5.1 AJAX - 即使我发送 POST 请求,也不允许返回 405 GET 方法