使用jquery从PHP / MySQL查询中获取JSON数据到html标记中

时间:2011-09-06 14:32:11

标签: php jquery mysql json

大家好我是stackoverflow的新手,也是Jquery的新手

希望我能让自己理解。这就是我想要的:我使用PHP

的类对我的MySQL数据库进行了查询
public function User($id) {
    $this->connect_db_web($conn);
    $sql = mysql_query("SELECT * FROM users WHERE id='".$id."'");
    while ($values = mysql_fetch_array($sql)) {
        $arr[]=array(
        'id'=>$values['idUsers'],
        'name'=>$values['name'],
        'name2'=>$values['name2'],
        'lname'=>$values['lname'],
        'lname2'=>$values['lname2'],
        'email'=>$values['email'],
        'phone'=>$values['phone'],
        'address'=>$values['address'],
        'bday'=>$values['bday'],
        'password'=>$values['password']
        );
    }
    echo '{"user":'.json_encode($arr).'}';
}

然后我有一个PHP代码,我调用这个函数

$name = $user->User($id);

我认为这样可行(如果我错了请帮忙)。现在我真正想做的是将JSON数组中的值转换为特定的div,例如:

$.getJSON("user.php",function(data){
$.each(data.user, function(i,user){
    name = user.name;
    $(name).appendTo('#getname');
});
}); 

在我的HML中我有<p id="getname"></p>这是我想要显示的值的标签

但没有显示任何价值,为什么?,我做错了什么?

感谢帮助我提供帮助

4 个答案:

答案 0 :(得分:3)

您的JSON格式不正确。您正在追加一堆对象{.1.}{.2.}{.3.}。相反,请尝试{"users":[{.1.},{.2.},{.3.}]}

在PHP中你会做这样的事情(注意我已经通过添加callback参数将响应类型更改为JSON-P而不是JSON):

public function User($id) {
    $users = array();

    $this->connect_db_web($conn);
    $sql = mysql_query("SELECT * FROM users WHERE id='".$id."'");
    while ($values = mysql_fetch_array($sql)) {
        $users[] = array(
          'id'=>$values['idUsers'],
          'name'=>$values['name']
          // etc.
        );
    }
    $obj['users'] = $users;

    $callback = (empty($_GET["callback"])) ? 'callback' : $_GET["callback"];
    echo $callback . '(' . json_encode($obj) . ');';
}

然后你就能做到:

$.getJSON("user.php?callback=",function(data){
  $.each(data.users, function(i,user){
    $('#getname').append(user.name);
  });
}); 

答案 1 :(得分:2)

这样做可能比较安全:

echo json_encode(array("user" => $arr));

另一端你会收到一个对象,我建议像这样迭代:

var k;

for (k in data.user){
     $("#getname").append($("<span></span>").html(data.user[k].name));
} 

鉴于您只为一个用户提取信息,请按照我的建议

$id = (int) $_GET["id"]; // or wherever you get it from.
if ($r = $db->mysql_fetch_assoc()){
    $response = array(
        "name" => $r["name"];
    );
    echo json_encode($response);
} else {
    echo json_encode(array("error" => "Could not get name for user " . $id));
}

然后,在前端,你需要做的就是:

if (typeof(data.name) != "undefined"){
    $("#getname").html(data.name);
} else if (typeof(data.error) != "undefined"){
    $("#getname").html(data.error); //or handle otherwise
}

答案 2 :(得分:0)

您误解了JSON结构。您将数据库行附加到数组,并将其嵌入到对象中。如果您在.getJSON调用中执行console.log(user),则会看到您必须这样做:

user[0].name

代替。同样,您的代码假定用户ID存在,并返回数据,而不管结果集中实际存在多少行或多少行。至少您的JS代码应该检查users.length以查看是否有任何行开头。除此之外,除非您在某个代码的某个部分执行此操作,否则$id值可能来自网页,这意味着您的查询容易受到SQL注入攻击。

答案 3 :(得分:0)

好的,得到了​​, 是一个PHP代码错误和JSON结构,正如马克所说,这里我将发布最终我有的 PHP类

public function User() {
$users = array();
$this->connect($conn);
$sql = mysql_query("SELECT * FROM users WHERE id='1'");
    $values = mysql_fetch_array($sql);
        $users[] = array(
            'id'=>$values['id'],
            'name'=>$values['name'],
            'name2'=>$values['name2'],
            'lname'=>$values['lname'],
            ...//rest of values
            );

    echo json_encode($users);
}

获取课程的PHP模块

include"class.php";
$user = new Users();
$user->User();

现在我是如何使用JQuery

获取值的
$.getJSON('user.php', function(data){
        $('wherever_you_want_to_point_at').text(data[0].name);
    });

希望它对某人有帮助, 再次感谢大家,非常非常乐于助人 小心你所有