【问题标题】:Problems getting json array in php using json_decode使用 json_decode 在 php 中获取 json 数组的问题
【发布时间】:2015-08-17 11:48:26
【问题描述】:

我试图在 php 脚本之间传递和返回一个数组,我已经测试了 json_ecode 部分及其工作,但我无法在 php 端获取 json_decode。

Javascript

    scid_list = []; 
    $('.filter_on').each(function(){scid_list.push($(this).data("scid"));});
    $.ajax({
       type: "POST",
       dataType: "json",
       data: {scid_list:scid_list},
       url: "/scripts/products_filter.php",
       success: function(data){
                alert(data.join('\n'));
       }
    });

PHP

<?php
     $scid_list=(json_decode($_POST['scid_list'], true));
     echo json_encode($scid_list);
     exit();
?>

我也尝试在解码时忽略 true

$scid_list=(json_decode($_POST['scid_list']);

根本不解码

$scid_list=$_POST['scid_list'];

我不确定我错过了什么。我也尝试过序列化数据,但如果您将 dataType 指定为 json,我不必这样做,我尝试使用 stripslashes

感谢任何帮助!

干杯

【问题讨论】:

  • 出于好奇,简单的var_dumpprint_r 输出什么?
  • 你能把你得到的东西发到$_POST['scid_list']
  • 你传递的好像不是JSON,而是一个以数组为值的对象
  • 你没有发送任何 json 那么你为什么需要使用json_decode
  • jQuery 将您发送的数据转换为 www-x-form-urlencoded,而不是 JSON

标签: javascript php jquery ajax json


【解决方案1】:

我认为问题在于您发送的数据不是 json,即使您在 Ajax 调用中指定了它。因为它只是你得到的一个二维数组,你为什么不在你的 JS 中使用 Array.join 在做帖子之前:

var scids = scid_list.join(','); 

这会将其转换为逗号分隔的字符串。例如

"id1,id2..."

您也可以稍微简化 Ajax 调用:

$.post('/scripts/products_filter.php', {scids: scids}, function(data) {
    // process data response here
});

然后在您的 PHP 文件中,您可以使用 explode() 将其转回数组:

$ids = explode(",",$_POST["scids"]);
foreach ($ids as $id) { 
    // Do something with the array of ids.    
};

希望一切都有意义。

【讨论】:

    【解决方案2】:

    您的 dataType 参数指定您期望 JSON 数据作为响应,但这并不意味着您将数据作为 JSON 发送。在您的情况下,您正在发送一个数组,因此在 PHP 中而不是:

    $scid_list=(json_decode($_POST['scid_list'], true)); /* WRONG */
    

    你应该简单地使用:

    $scid_list=$_POST['scid_list'];
    

    dataType(默认:Intelligent Guess(xml、json、script 或 html))

    Type: String 您期望从 服务器。

    总而言之,对于给定的 HTML:

    <form action="work.php" method="post">
        <p><input class="filter_on" data-scid="22" type="checkbox" /> Filter 22</p>
        <p><input class="filter_on" data-scid="28" type="checkbox" /> Filter 28</p>
        <p><input class="filter_on" data-scid="31" type="checkbox" /> Filter 31</p>
        <p><input type="submit" value="Send" /></p>
    </form>
    

    和脚本:

    $(document).on('ready', function() {
        $('form').on('submit', function(e) {
            e.preventDefault();
            scid_list = []; 
            $('.filter_on:checked').each(function(i){
                scid_list.push( $(this).data("scid") );
            });
            $.ajax({
                type: "POST",
                dataType: "json",
                data: {scid_list:scid_list},
                url: "work.php",
                success: function(data){
                    alert(data.join('\n'));
                }
            });
        });
    });
    

    PHP部分是:

    $scid_list=$_POST['scid_list'];
    echo json_encode($scid_list);
    exit();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      相关资源
      最近更新 更多