私のアプリでは、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( '&')のようなものは機能しません。
アイデア?
前もって感謝します
配列でない場合は配列にしないで、オブジェクトにします。
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の配列の処理を利用するだけで、実際には正しい方法ではありません。
配列が既に定義されている場合、サーバーに投稿できる配列の要素をループして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>
お役に立てれば
SaveDataオブジェクトのキー/値のペアを反復処理してペアの配列を作成し、結果の配列でjoin( "&")を使用できます。
var a = [];
for (key in saveData) {
a.Push(key+"="+saveData[key]);
}
var serialized = a.join("&") // a=2&c=1
配列オブジェクトと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();
を使用します
サーバー上でデータを使用する場合、文字列はスラッシュを追加することで到達できます。たとえば、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);
?>