【问题标题】:Pass PHP Array to script through jquery $.ajax() in Wordpress在 Wordpress 中通过 jquery $.ajax() 将 PHP 数组传递给脚本
【发布时间】:2017-04-12 13:31:14
【问题描述】:

我在 DOM 中有一个大数组()。

<div id="array"><?php echo serialize($bigArray); ?></div>

我需要在我的 wordpress 主题中通过 ajax 传递这些数据。

$(document).on('click','#somewhere',function(){
        var datas = $('#array').html();
        $.ajax({
            url : ajax_object.ajaxurl,
            type : 'post',
            data : {
                action:'wordpress_action',
                array: datas
            },
            success: function(res) {
                console.log(res);
            }
        });
    })

在我的 php 脚本中:

add_action('wp_ajax_wordpress_hook', 'my_func');
add_action('wp_ajax_nopriv_wordpress_hook', 'my_func');

function my_func(){
    $data = unserialize($_POST['array']);
    print_r($data);
    die();
}

但这似乎不起作用。

有什么建议吗? 如何通过 ajax 传递 php 数组? json_encode? php 会话?

【问题讨论】:

  • 我更改了我的帖子。我写错了!

标签: arrays json ajax wordpress


【解决方案1】:

在服务器上,您应该将您的 $bigArray 以 JSON 格式嵌入到 HTML data attribute 中。

PHP 的 JSON 编码函数称为 json_encode()(不是 serialize(),而是 something entirely different)。

<div id="array" data-entities="<?php htmlspecialchars(json_encode($bigArray)) ?>">
  ... regular HTML here ...
</div>

当您将数据写入 HTML 时,您总是需要调用 htmlspecialchars()


在客户端,您可以使用 jQuery 的 .data() 方法访问数据属性。

对于通过 HTTP 传输,您需要将数据重新编码为 JSON。 Javascript 的 JSON 编码函数称为JSON.stringify()。见:How can I use JQuery to post JSON data?

$(document).on('click', '#somewhere', function () {
    $.ajax({
        url: ajax_object.ajaxurl,
        type: 'post',
        contentType: 'application/json',
        data: JSON.stringify({
            action: 'wordpress_action',
            array: $('#array').data('entities')
        })
    }).done(function (res) {
        console.log(res);
    });
});

【讨论】:

    【解决方案2】:

    试试这样的:

    echo "<script type=\"text/javascript\">\n";
    echo "var strJson = " . json_encode($bigArray) . "\n";
    echo "var arrAsObj = JSON.parse(strJson)\n";
    echo "</script>\n";
    

    现在您应该可以访问页面上的这两个变量了。您应该能够在 ajax 帖子的请求正文中传递“arrAsObj”。如果您遇到问题,请确保将此脚本放在 html 文件中的 ajax 调用之前。

    【讨论】:

      【解决方案3】:

      感谢 Tomalak,根据您的建议,我解决了我的错误,但我编辑了您的代码。

      <div id="array" data-value="<?php echo htmlspecialchars(json_encode($bigArray)) ?>">
      
      $(document).on('click','#somewhere',function(){
              var datas = $('#array').data('value');
              $.ajax({
                  url : ajax_object.ajaxurl,
                  type : 'post',
                  data : {
                      action:'wordpress_action',
                      array: datas
                  },
                  success: function(res) {
                      console.log(res);
                  }
              });
          })
      

      然后在 PHP 脚本中:

      add_action('wp_ajax_wordpress_hook', 'my_func');
      add_action('wp_ajax_nopriv_wordpress_hook', 'my_func');
      
      function my_func(){
          $data = $_POST['array'];
          print_r($data);
          die();
      }
      

      这符合我的预期

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-03
        • 2020-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多