我有一个文件ajax.php,我用它来处理通过jquery传递的数据。我在成功的表单验证中调用了这一特定代码:
$.post("/ajax.php",{'request': 'emailLogin', 'loginmail': mail, 'loginpass': pass}, function(data) {} );
在我的情况下,数据是:{"valid":true}{"auth":false}
作为来自ajax.php的响应返回,但我似乎无法提交正确的定义方式" auth"和值为#34; false"的变量。
我的ajax.php只是检查登录名和密码是否在数据库中,而不是echo json_encode(array('auth' => false));
或echo json_encode(array('auth' => true));
,具体取决于结果。但它也包含这些内容:
if( isset($_POST['loginmail'])) {
$usermail = htmlspecialchars($_POST['loginmail']);
if (!filter_var($usermail, FILTER_VALIDATE_EMAIL)) {
$response = array('valid' => false, 'message' => 'You did not enter a correct email address.');
} else {
// All good
$response = array('valid' => true);
}
}
echo json_encode($response);
答案 0 :(得分:1)
不要与验证结果分开回显json_encode($response)
,您需要将它们组合起来。执行身份验证后,执行:
$response['auth'] = $result_of_authentication;
然后做
echo json_encode($response);
执行此操作后,您应该可以在Javascript中访问data.auth
。您应该告诉$.post
它返回JSON:
$.post("/ajax.php",{
'request': 'emailLogin',
'loginmail': mail,
'loginpass': pass},
function(data) {
alert(data.auth);
},
"json");
答案 1 :(得分:0)
根据您的PHP代码,您应该能够访问有效属性,如下所示:
$.post("/ajax.php",{'request': 'emailLogin', 'loginmail': mail, 'loginpass': pass}, function(data) {
var auth = data.valid;
if (auth) {
// do something!
} else {
// do something else!
}
});
此外,您的PHP代码中存在错误,您需要为$ response设置默认值,如下所示:
$response = array('valid' => false, 'message' => 'Email address is required');
if( isset($_POST['loginmail'])) {
$usermail = htmlspecialchars($_POST['loginmail']);
if (!filter_var($usermail, FILTER_VALIDATE_EMAIL)) {
$response = array('valid' => false, 'message' => 'You did not enter a correct email address.');
} else {
// All good
$response = array('valid' => true);
}
}
echo json_encode($response);
否则,如果未设置$_POST['loginmail']
,则应用程序将抛出未定义的变量异常
编辑:
正如Barmar在他的回答中所指出的,你应该只回应一次回复,以避免产生无效的回应。您需要的任何数据都应该以单个数组的形式发回。我没有看到你在你的PHP代码中这样做,但你确实提到了回显另一个数组['auth' => false]
,它不会按照你想要的方式工作