donglanying3855 2012-11-12 16:44
浏览 90
已采纳

使用JSON将Javascript数组传递给PHP

I have 2 selects on my HTML, the options are loaded via my database and the user can switch the options between the boxes, like so:

<select id="column1" multiple size="10" name="FromLB" style="width:150px">
        <?php foreach ($result->result() as $row) { ?>
        <option value="<?php echo $row->id ?>"><?php echo $row->title ?></option>
        <?php } ?>
</select>

example

So far so good, the final plan is for the the user to click Submit and to have access to the data on these two selects in PHP (via an array).

After digging around for a bit, it seems like JSON is the way to go.

I import json.js to my project and get to work:

    function sort_cols(){
            var i=0;
            var p=0;
            var column1 = new Array();
            var column2 = new Array();

            $("#column1 option").each(function()
            {
                column1[i]=$(this).val();
                i=i+1;
            });

            $("#column2 option").each(function()
            {
                column2[p]=$(this).val();
                p=p+1;
            });      

            JSON = JSON.stringify(column1);

            $.ajax({
                url: '<?php echo base_url() . 'js_tests/update_news'; ?>',
                type: 'POST',
                data: JSON,
                success: function(){
                    alert("Success!")
                }


 });
    }

So far I'm only passing one array (for the first select column), but I'm getting an error: Uncaught TypeError: Object ["15","14","1"] has no method 'stringify'

I've been following this answer: How exactly do you use json_decode to pass a javascript array to php?

I'm wondering what am I doing wrong here, and how can I pass my second array (column2) as well?

  • 写回答

3条回答 默认 最新

  • douhan5853 2012-11-12 16:50
    关注

    There's some strange behaviour happening here, most likely caused by the fact your JSON variable is overwriting the browser's native JSON object (or the one provided by json.js in older browsers).

    You can actually pass an object directly to $.ajax, so the following will work:

    $.ajax({
        url: '<?php echo base_url() . 'js_tests/update_news'; ?>',
        type: 'POST',
        data: column1,
        success: function(){
            alert("Success!")
        }
    });
    

    If you want to pass both columns as separate parameters, change it to:

    $.ajax({
        url: '<?php echo base_url() . 'js_tests/update_news'; ?>',
        type: 'POST',
        data: {
            first_column: column1,
            second_column: column2
        },
        success: function(){
            alert("Success!")
        }
    });
    

    They will now be available in your PHP script as $_POST['first_column'] and $_POST['second_column'].

    This way, you leave the heavy lifting of converting your objects to JSON to jQuery, so you don't need to include the json.js library at all.

    Your full code, rewritten:

    function sort_cols(){
        var column1 = [],
            column2 = [];
    
        $("#column1 option").each(function() {
            column1.push($(this).val());
        });
    
        $("#column2 option").each(function() {
            column2.push($(this).val());
        });      
    
        $.ajax({
            url: '<?php echo base_url() . 'js_tests/update_news'; ?>',
            type: 'POST',
            data: {
                first_column: column1,
                second_column: column2
            },
            success: function(){
                alert("Success!")
            }
        });
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 关于php页面调取、更新数据提交刷新等问题
  • ¥50 使用 java+selenium 接管手动打开的IE浏览器
  • ¥15 ios 新安装app收不到fcm推送
  • ¥15 有没有实力的写手?有过成品的优先
  • ¥15 图像信息库的建立与识别
  • ¥15 韩国网站购物,KG支付的支付回调如何解决
  • ¥15 workstation导入ovf文件,报错,怎么解决呢?
  • ¥15 关于#c语言#的问题:构成555单稳态触发器,采用LED指示灯延时时间,对延时时间进行测量并显示(如楼道声控延时灯)需要Proteus仿真图和C语言代码
  • ¥15 workstation加载centos进入emergency模式,查看日志报警如图,怎样解决呢?
  • ¥50 如何用单纯形法寻优不能精准找不到给定的参数,并联机构误差识别,给定误差有7个?matlab