大家好我是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>
这是我想要显示的值的标签
但没有显示任何价值,为什么?,我做错了什么?
感谢帮助我提供帮助
答案 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);
});
希望它对某人有帮助, 再次感谢大家,非常非常乐于助人 小心你所有