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 でこれら 2 つの選択に関するデータに (配列を介して) アクセスできるようにすることです。

少し調べてみると、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!")
                }


 });
    }

これまでのところ、(最初の選択列に対して) 配列を 1 つだけ渡していますが、エラーが発生しています: Uncaught TypeError: Object ["15","14","1"] has no method 'stringify'

私はこの答えに従ってきました: どのように正確に json_decode を使用して javascript 配列を php に渡しますか?

ここで何が間違っているのだろうか、どうすれば2番目の配列(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 に答える