Преобразование js Array() в объект JSon для использования с JQuery.ajax
в моем приложении мне нужно отправить объект массива javascript в php script через сообщение ajax. Что-то вроде этого:
var saveData = Array();
saveData["a"] = 2;
saveData["c"] = 1;
alert(saveData);
$.ajax({
type: "POST",
url: "salvaPreventivo.php",
data:saveData,
async:true
});
Индексы массива - это строки, а не int, поэтому по этой причине что-то вроде saveData.join('&') не работает.
Идеи?
Заранее спасибо
Ответы
Ответ 1
Не делайте его массивом, если он не является массивом, сделайте его объектом:
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-обработку массивов и не совсем правильный способ сделать это.
Ответ 2
Если массив уже определен, вы можете создать объект 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>
Надеюсь, что это поможет
Ответ 3
Вы можете перебирать пары ключ/значение объекта saveData для построения массива пар, а затем использовать join ( "&" ) в результирующем массиве:
var a = [];
for (key in saveData) {
a.push(key+"="+saveData[key]);
}
var serialized = a.join("&") // a=2&c=1
Ответ 4
Существует реальная разница между объектом массива и объектом 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();
Ответ 5
При использовании данных на сервере ваши символы могут достигать с добавлением косой черты, например
if string = { "hello" }
приходит как строка = {\ "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);
?>