从PHP创建JavaScript对象以保存包含用户数据字段的用户列表

时间:2015-07-17 21:42:06

标签: javascript

我正在使用JavaScript和PHP构建项目管理应用程序。

我的许多JavaScript文件都需要从我的后端数据库访问用户列表。为了提高性能或服务器命中率,我想用PHP附加一次附加用户数据的用户列表,并将其作为JavaScript对象打印到屏幕上,然后我的其他JavaScript文件可以访问以获取用户数据。

假设我有20个用户。

我需要访问所有JavaScript应用程序/对象中的这些用户字段:

  • 用户名
  • 用户ID
  • 用户ACL角色
  • 用户gravatar图片网址

我不确定是否应该使用我的用户列表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>

4 个答案:

答案 0 :(得分:1)

我会说使用JSON。

您可以在PHP中创建一个编码为JSON的多维数组。

在JS中解析JSON后,您可以像对象一样访问它。 E.g:

myUserData[1].name

答案 1 :(得分:1)

  1. 如果您始终需要所有用户数据,则可以在PHP模板中将一组用户编写为JS对象数组。你不需要JSON。类似的东西:
  2. <?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中的用户列表。

    1. 如果您需要按需提供用户数据(您不知道您的应用需要哪些数据),您可以在PHP中使用JSON格式返回用户的一些API:
    2. <?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对象