【问题标题】:How to send an JavaScript array to PHP via jQuery.ajax? [duplicate]如何通过 jQuery.ajax 将 JavaScript 数组发送到 PHP? [复制]
【发布时间】:2013-11-29 02:25:42
【问题描述】:

我正在尝试通过 jQuery.ajax 将 JavaScript 数组发送到 PHP 页面,但发送的数组仅包含空白值。

如果我在 Chrome 上打开 F12 控制台并检查 JS 对象,它就在那里。都满了。但是当我使用 ChromePhp 工具记录 PHP 变量时,它只显示空白值(另外,如果我遍历 php 数组,回显它的值,我会得到所有空白)。

我在这里很困惑。

这是我的示例代码:

<?php 
include 'ChromePhp.php';
if (isset($_GET['newUsers'])) {
    $newUsers = $_GET['newUsers'];
    ChromePhp::log($newUsers);
} else { ?>

<html>
<body>

    <script src="js/jquery-2.0.3.min.js"></script>
    <script type="text/javascript">
        var newUsers = [];

        newUser = [];
        newUser['nome'] = 'alvaro';
        newUser['idade'] = '34';
        newUsers.push(newUser);

        newUser1 = [];
        newUser1['nome'] = 'bia';
        newUser1['idade'] = '7';
        newUsers.push(newUser1);

        newUser2 = [];
        newUser2['nome'] = 'alice';
        newUser2['idade'] = '2';
        newUsers.push(newUser2);

        $.ajax({
            url: "testcookie.php",
            type: "GET",
            data: {
                'newUsers[]': newUsers
            }
        });

    </script>
</body>
</html>
<?php } ?>

更新基于第一个 cmets。现在我可以传递对象,但不知道如何读取它的属性。已经尝试 $user['nome'] 没有结果。

<?php 
include 'ChromePhp.php';

if (isset($_POST['newUsers'])) {

    $newUsers = $_POST['newUsers'];

    foreach ($newUsers as $user) {
        # code...
        # HOW DO I READ THE nome AND idade VALUES HERE?
    }

} else { ?>

<html>
<body>

    <script src="js/jquery-2.0.3.min.js"></script>
    <script type="text/javascript">
        //var newUsersObj = {};
        var newUsers = [];

        newUser = {};
        newUser['nome'] = 'alvaro';
        newUser['idade'] = '34';
        newUsers.push(newUser);

        newUser1 = {};
        newUser1['nome'] = 'bia';
        newUser1['idade'] = '7';
        newUsers.push(newUser1);

        newUser2 = {};
        newUser2['nome'] = 'alice';
        newUser2['idade'] = '2';
        newUsers.push(newUser2);

        $.ajax({
            url: "testcookie.php",
            type: "POST",
            data: {
                'newUsers[]': newUsers
            },
            success: function () {

            },
            error: function () {

            }
        });

    </script>
</body>
</html>
<?php } ?>

【问题讨论】:

  • 你尝试过使用 JSON.stringify(newUsers); ?
  • 你所有的newUser对象都应该用{}初始化,因为它们是不是数组
  • 成功了,@Phil!我只需要弄清楚如何在 PHP 上读取 JavaScript 对象。 :)
  • 读取php上的JS对象
  • 另外,如果您将数据发送到服务器(而不是请求它),最好使用 POST。 REST

标签: javascript php json jquery


【解决方案1】:

只需传递数组或对象,jQuery 会自动将数组或对象转换为正确的参数,例如 a=[1,2] -> a[]=1&a[]=2

 data: {
    'newUsers': newUsers
 }

实现这一点的内部函数是http://api.jquery.com/jQuery.param/

【讨论】:

    【解决方案2】:

    知道了!

    要在 PHP 中正确访问 JavaScrtipt 对象,我需要在推送数组时对它们进行 JSON.stringify。然后,在 PHP 上,json_decode 将它们转换为 PHP 对象,并使用 '->' 运算符访问它们的属性。

    最终解决方案如下:

    <?php 
    include 'ChromePhp.php';
    
    if (isset($_POST['newUsers'])) {
    
        $newUsers = $_POST['newUsers'];
    
        foreach ($newUsers as $user) {
            # code...
            $usr = json_decode($user);
            ChromePhp::log("Nome: " . $usr->nome . " - Idade: " . $usr->idade);
        }
    
    } else { ?>
    
    <html>
    <body>
    
        <script src="js/jquery-2.0.3.min.js"></script>
        <script type="text/javascript">
            //var newUsersObj = {};
            var newUsers = [];
    
            newUser = {};
            newUser['nome'] = 'alvaro';
            newUser['idade'] = '34';
            newUsers.push(JSON.stringify(newUser));
    
            newUser1 = {};
            newUser1['nome'] = 'bia';
            newUser1['idade'] = '7';
            newUsers.push(JSON.stringify(newUser1));
    
            newUser2 = {};
            newUser2['nome'] = 'alice';
            newUser2['idade'] = '2';
            newUsers.push(JSON.stringify(newUser2));
    
            $.ajax({
                url: "testcookie.php",
                type: "POST",
                data: {
                    'newUsers[]': newUsers
                },
                success: function () {
    
                },
                error: function () {
    
                }
            });
    
        </script>
    </body>
    </html>
    <?php } ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多