Jquery Ajax调用得到json结果'undefined'


Jquery Ajax call got json result 'undefined'

我想使用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) . ');';