我正在使用JavaScript和PHP构建项目管理应用程序。
我的许多JavaScript文件都需要从我的后端数据库访问用户列表。为了提高性能或服务器命中率,我想用PHP附加一次附加用户数据的用户列表,并将其作为JavaScript对象打印到屏幕上,然后我的其他JavaScript文件可以访问以获取用户数据。
假设我有20个用户。
我需要访问所有JavaScript应用程序/对象中的这些用户字段:
我不确定是否应该使用我的用户列表PHP生成JavaScript对象,或者是否需要将其生成为JSON?
还有,对象或JSON,你能否请说明如何格式化它以在列表中包含多个用户记录,然后我将如何从我的其他JavaScript文件访问用户数据,假设我有用户的ID
因此,如果我有用户ID 1,我可以从我的其他JavaScript文件调用一个函数或对象,并且他们可以访问ID为1的用户的所有数据,方法是将我的PHP打印到JavaScript中的JavaScript。页面标题。
请帮忙吗?
理想情况下,我认为能够致电:
var user = cureentJsObject.getUser(userId);
user.gravatarUrl // https://www.gravatar.com/avatar/7ab1baf18a91ab4055923c5fd01d68a2?s=48&d=identicon&r=PG
user.username // JasonDavis
user.role // admin
能够根据用户列表屏幕标题中的数据在我的其他JavaScript对象/应用程序中执行类似的操作会非常好,但我不确定该怎么做?
更新
我认为这个PHP会产生我想要的东西。只需要弄清楚在页面中其他JS文件的所有对象中访问它的最佳方法
<?php
// PHP array
$userList = array(
array(
'id' => '1gdfgdfkn123423423',
'username' => 'JasonDavis',
'role' => 'admin',
'gravatar' => 'https://www.gravatar.com/avatar/7ab1baf18a91ab4055923c5fd01d68a2?s=48&d=identicon&r=PG'
),
array(
'id' => '2gdfgdfkn123423423',
'username' => 'John Doe',
'role' => 'user',
'gravatar' => 'https://www.gravatar.com/avatar/7ab1baf18a91ab4055923c5fd01d68a2?s=48&d=identicon&r=PG'
),
array(
'id' => '3gdfgdfkn123423423',
'username' => 'Rick James',
'role' => 'user',
'gravatar' => 'https://www.gravatar.com/avatar/7ab1baf18a91ab4055923c5fd01d68a2?s=48&d=identicon&r=PG'
),
);
?>
var users = <?php echo json_encode($userList) ?>;
JSON输出:
var users = [{
"id": "1gdfgdfkn123423423",
"username": "JasonDavis",
"role": "admin",
"gravatar": "https:\/\/www.gravatar.com\/avatar\/7ab1baf18a91ab4055923c5fd01d68a2?s=48&d=identicon&r=PG"
}, {
"id": "2gdfgdfkn123423423",
"username": "John Doe",
"role": "user",
"gravatar": "https:\/\/www.gravatar.com\/avatar\/7ab1baf18a91ab4055923c5fd01d68a2?s=48&d=identicon&r=PG"
}, {
"id": "3gdfgdfkn123423423",
"username": "Rick James",
"role": "user",
"gravatar": "https:\/\/www.gravatar.com\/avatar\/7ab1baf18a91ab4055923c5fd01d68a2?s=48&d=identicon&r=PG"
}];
更新2
我现在可以从上面访问用户......
<script>
function findById(source, id) {
for (var i = 0; i < source.length; i++) {
if (source[i].id === id) {
return source[i];
}
}
throw "Couldn't find object with id: " + id;
}
var users = <?php echo json_encode($userList) ?>;
var id = '2gdfgdfkn123423423';
var user = findById(users, id);
alert(user.gravatar);
</script>
答案 0 :(得分:1)
我会说使用JSON。
您可以在PHP中创建一个编码为JSON的多维数组。
在JS中解析JSON后,您可以像对象一样访问它。 E.g:
myUserData[1].name
答案 1 :(得分:1)
<?php
$users_JS = array_map(function($user) {
return "{name: '{$user->name}', gravatar: '{$user->gravatar}'}";
}, $users)
?>
<head>
<title>PHP to JS</title>
<script>
window.MyApp.users = [
<?php echo implode(',', $users_JS); ?>
];
</script>
</head>
现在,您可以访问window.MyApp.users
中的用户列表。
<?php
$user = getUserFromId($_GET['id']);
header('Content-type: application/json');
echo json_encode($user);
在JS中:
$.ajax({
type: 'GET',
url: '/getUser.php', // URL of previuose PHP
data: {id: 3}
}).done(function(user3) {
// Do awesome things with user3
});
显然,此代码需要验证,404如果用户ID不存在等,等等......
HTH!
答案 2 :(得分:0)
您可以使用json_encode将用户对象传递给它。
答案 3 :(得分:-1)
更好的方法是创建一个与&#39;连接的字符串。&#39;运算符和javascript使用JSON.parse使其成为JSON对象