0

我的 HTML 上有 2 个选项,选项是通过我的数据库加载的,用户可以在框之间切换选项,如下所示:

<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>

例子

到目前为止一切顺利,最终计划是让用户单击提交并访问 PHP 中这两个选择的数据(通过数组)。

在挖掘了一下之后,似乎 JSON 是要走的路。

我将 json.js 导入我的项目并开始工作:

    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!")
                }


 });
    }

到目前为止,我只传递了一个数组(对于第一个选择列),但我收到了一个错误: Uncaught TypeError: Object ["15","14","1"] has no method 'stringify'

我一直在关注这个答案: 您究竟如何使用 json_decode 将 javascript 数组传递给 php?

我想知道我在这里做错了什么,以及如何传递我的第二个数组(column2)?

4

3 回答 3

4

在这一行

JSON = JSON.stringify(column1);

您重新定义了本机 JSON 对象。为您的变量使用另一个名称,您应该没问题。

至于提交两个数组,只需使用一个封装对象:

data2send = JSON.stringify( { 'column1': column1, 'column2': column2 } );

除了使用递增索引将数据插入数组之外,只需使用本机push()方法即可。

于 2012-11-12T16:47:45.090 回答
1

这里发生了一些奇怪的行为,很可能是由于您的JSON变量覆盖了浏览器的本机JSON对象(或json.js旧浏览器提供的对象)。

您实际上可以将对象直接传递给$.ajax,因此以下内容将起作用:

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

如果要将两列作为单独的参数传递,请将其更改为:

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

它们现在将在您的 PHP 脚本中以$_POST['first_column']$_POST['second_column'].

这样一来,您就无需将对象转换为 JSON 到 jQuery 的繁重工作,因此您根本不需要包含该json.js库。

您的完整代码,重写:

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!")
        }
    });
}
于 2012-11-12T16:50:31.490 回答
0

让 jQuery 完成繁重的工作:

function sort_cols(){
    var col1 = [], col2 = [];

    $("#column1 option").each(function() {
        col1.push($(this).val());
    });

    $("#column2 option").each(function() {
        col2.push($(this).val());
    });  

    $.ajax({
        url: '<?php echo base_url() . 'js_tests/update_news'; ?>',
        type: 'POST',
        contentType: "application/json",
        data: JSON.stringify({
            column1: col1,
            column2: col2
        }),
        success: function(){
            alert("Success!")
        }
    });
}
于 2012-11-12T17:01:45.550 回答