首页 文章

使用json_decode在php中获取json数组的问题

提问于
浏览
1

我试图传递和返回一个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();
?>

我也尝试在解码时省略真实

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

而根本不解码它

$scid_list=$_POST['scid_list'];

我不确定我错过了什么 . 我也尝试过序列化数据,但如果你将dataType指定为json,我就不必阅读,我尝试使用stripslashes

任何帮助表示赞赏!

干杯

2 回答

  • 1

    我认为问题在于,即使您在Ajax调用中指定了数据,您发送的数据也不是json . 因为它只是你得到的二维数组,为什么不在你的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.    
    };
    

    希望一切都有道理 .

  • 1

    您的 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))类型: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();
    

相关问题