web-dev-qa-db-ja.com

JQuery .ajaxで使用するためにjs Array()をJSonオブジェクトに変換します

私のアプリでは、ajaxポストを介してjavascript配列オブジェクトをphpスクリプトに送信する必要があります。このようなもの:

var saveData = Array();
saveData["a"] = 2;
saveData["c"] = 1;
alert(saveData);
$.ajax({
    type: "POST",
    url: "salvaPreventivo.php",
    data:saveData,
    async:true
    });

配列のインデックスは文字列であり、intではないため、このためsaveData.join( '&')のようなものは機能しません。

アイデア?

前もって感謝します

28
Alekc

配列でない場合は配列にしないで、オブジェクトにします。

var saveData = {};
saveData.a = 2;
saveData.c = 1;

// equivalent to...
var saveData = {a: 2, c: 1}

// equivalent to....
var saveData = {};
saveData['a'] = 2;
saveData['c'] = 1;

配列で行うのと同じ方法で行うのは、Javascriptの配列の処理を利用するだけで、実際には正しい方法ではありません。

63

配列が既に定義されている場合、サーバーに投稿できる配列の要素をループしてjsonオブジェクトを作成できますが、上記の場合のように配列を作成する場合は、代わりにjsonオブジェクトを作成します パオロベルガンティーノ

    var saveData = Array();
    saveData["a"] = 2;
    saveData["c"] = 1;

    //creating a json object
    var jObject={};
    for(i in saveData)
    {
        jObject[i] = saveData[i];
    }

    //Stringify this object and send it to the server

    jObject= YAHOO.lang.JSON.stringify(jObject);
    $.ajax({
            type:'post',
           cache:false,
             url:"salvaPreventivo.php",
            data:{jObject:  jObject}
    });

    // reading the data at the server
    <?php
    $data = json_decode($_POST['jObject'], true);
    print_r($data);
    ?>

    //for jObject= YAHOO.lang.JSON.stringify(jObject); to work,
    //include the follwing files

    //<!-- Dependencies -->
    //<script src="http://yui.yahooapis.com/2.9.0/build/yahoo/yahoo-min.js"></script>

    //<!-- Source file -->
    //<script src="http://yui.yahooapis.com/2.9.0/build/json/json-min.js"></script>

お役に立てれば

7

SaveDataオブジェクトのキー/値のペアを反復処理してペアの配列を作成し、結果の配列でjoin( "&")を使用できます。

var a = [];
for (key in saveData) {
    a.Push(key+"="+saveData[key]);
}
var serialized = a.join("&") // a=2&c=1
4
dstnbrkr

配列オブジェクトとJSONオブジェクトには実際に違いがあります。配列オブジェクトを作成してJSONオブジェクト(JSON.stringify(arr)を使用)に変換する代わりに、これを行うことができます。

_var sels = //Here is your array of SELECTs
var json = { };

for(var i = 0, l = sels.length; i < l; i++) {
  json[sels[i].id] = sels[i].value;
}
_

すでにJSONオブジェクトであるため、JSONに変換する必要はありません。同じ使用法を表示するには、json.toSource();を使用します

1
Tarun Gupta

サーバー上でデータを使用する場合、文字列はスラッシュを追加することで到達できます。たとえば、string = {"hello"}がstring = {\ "hello \"}である場合、次の関数を解決してjsonデコードを使用できます。

<?php
function stripslashes_deep($value)
{
    $value = is_array($value) ?
                array_map('stripslashes_deep', $value) :
                stripslashes($value);

    return $value;
}

$array = $_POST['jObject'];
$array = stripslashes_deep($array);

$data = json_decode($array, true);
print_r($data);
?>
0
Ismael Tarqui