在我的应用程序中,我需要通过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('&')这样的东西不起作用。
想法?
提前致谢
答案 0 :(得分:62)
如果它不是数组,请不要使它成为数组,使其成为对象:
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;
按照你使用Arrays的方式进行操作只是利用了Javascript对数组的处理,而不是正确的方法。
答案 1 :(得分:7)
如果已定义数组,则可以通过循环遍历数组的元素来创建json对象,然后可以将其发布到服务器,但如果要创建数组,就像上面的情况一样,只需创建一个json对象由Paolo Bergantino
提取 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>
希望这有帮助
答案 2 :(得分:4)
您可以迭代saveData对象的键/值对以构建对的数组,然后在结果数组上使用join(“&amp;”):
var a = [];
for (key in saveData) {
a.push(key+"="+saveData[key]);
}
var serialized = a.join("&") // a=2&c=1
答案 3 :(得分: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();
答案 4 :(得分:0)
使用服务器上的数据时,您的角色可以通过添加斜杠来达到,例如 if 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);
?>