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

时间:2011-10-03 15:43:31

标签: php ajax json jquery

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

5 个答案:

答案 0 :(得分:1)

从服务器发送的响应是JSON而不是JSONP。将dataType更改为JSON。

答案 1 :(得分:1)

您不需要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;);

答案 2 :(得分:1)

试试这个:

$.post("/modules/services/userlogincheck_new.php", {
   action : "checkpassword",
   email : email,
   password : password
}, function(data) {
   alert(data.first_name);
},'json');

答案 3 :(得分:1)

“非主题”:您的代码 可能极易受到SQL Injection 的攻击。如果我将';DROP TABLE users; --作为我的电子邮件地址发送,您就会遇到麻烦。

关于主题:

$.post(
    "/modules/services/userlogincheck_new.php",
    {
        action : "checkpassword",
        email : email,
        password : password
    },
    function(data) {
        alert(data.first_name);
    },
    'json'
);

$.post()需要明确设置数据类型。

答案 4 :(得分:0)

您正在使用jsonp,因此您需要根据自动创建的jsonp参数给出的参数将输出包装在函数调用中。

echo $_GET['jsonp'] . '(' . json_encode($arr) . ');';

或者,只需使用普通的JSON。