我想使用Jquery获得json结果。现在我总是得到"未定义"的结果。我可以使用
得到json打印alert(data);
但是总是返回'undefined'使用
alert(data.first_name);
Jquery客户端代码
$.post(
"/modules/services/userlogincheck_new.php",
{
dataType: 'jsonp',
action : "checkpassword",
email : email,
password : password
},
function(data) {
alert(data.first_name);
}
);
PHP服务器端if ($_POST['action'] == "checkpassword") {
$query = "select * from users where email='" . $email . "'";
$result = mysql_query($query, $forumdbcon) or die('Error, insert query failed');
while ($row = mysql_fetch_assoc($result)) {
if (($row['password'] == md5($password))) {
$arr = array("response" => 1, "first_name" => $row['first_name'], "last_name" => $row['last_name'], "address" => $row['address1']);
echo json_encode($arr);
} else {
$arr = array("response" => 2);
echo json_encode($arr);
}
}
}
试试这个:
$.post("/modules/services/userlogincheck_new.php", {
action : "checkpassword",
email : email,
password : password
}, function(data) {
alert(data.first_name);
},'json');
从服务器发送的响应是JSON而不是JSONP。将dataType更改为JSON
"Off topic": 您的代码是可能非常容易受到SQL注入的攻击。如果我把';DROP TABLE users; --
作为我的电子邮件地址,你就有麻烦了。
主题:
$.post(
"/modules/services/userlogincheck_new.php",
{
action : "checkpassword",
email : email,
password : password
},
function(data) {
alert(data.first_name);
},
'json'
);
$.post()
需要显式设置数据类型
您不需要jsonp
,因为这是在服务器上。
dataType: 'jsonp'
改为dataType: 'json'
。你正在使用$.post
,所以你只是将dataType
发送到PHP,它不做任何事情,你需要告诉$.post
使用JSON。
$.post("/modules/services/userlogincheck_new.php", {
action : "checkpassword",
email : email,
password : password
}, function(data) {
alert(data.first_name);
}, 'json;);
您正在使用jsonp
,因此您需要根据自动创建的jsonp
参数给出的参数将输出包装在函数调用中。
echo $_GET['jsonp'] . '(' . json_encode($arr) . ');';