$.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 数据的主要内容,如果未能解决你的问题,请参考以下文章