Преобразование объекта или массива javascript в JSON для данных ajax
поэтому я создаю массив с информацией об элементах. Я перебираю все элементы и сохраняю индекс. По какой-то причине я не могу преобразовать этот массив в объект json!
Это мой цикл массив:
var display = Array();
$('.thread_child').each(function(index, value){
display[index]="none";
if($(this).is(":visible")){
display[index]="block";
}
});
Я пытаюсь превратить его в объект JSON:
data = JSON.stringify(display);
он, похоже, не отправляет правильный формат JSON!
если я передаю код так, он работает и отправляет информацию:
data = {"0":"none","1":"block","2":"none","3":"block","4":"block","5":"block","6":"block","7":"block","8":"block","9":"block","10":"block","11":"block","12":"block","13":"block","14":"block","15":"block","16":"block","17":"block","18":"block","19":"block"};
когда я делаю предупреждение на формат JSON.объект stringify выглядит так же, как и закодированный вручную. Но это не работает.
Я схожу с ума, пытаясь решить эту проблему. Я что-то упускаю? Каков наилучший способ отправить эту информацию, чтобы получить формат ручной кодировки?
я использую этот метод AJAX для отправки данных:
$.ajax({
dataType: "json",
data:data,
url: "myfile.php",
cache: false,
method: 'GET',
success: function(rsp) {
alert(JSON.stringify(rsp));
var Content = rsp;
var Template = render('tsk_lst');
var HTML = Template({ Content : Content });
$( "#task_lists" ).html( HTML );
}
});
использование метода GET, потому что я отображаю информацию (не обновляя или вставляя). Только отправка отображаемой информации в мой php-файл.
конец Решение
var display = {};
$('.thread_child').each(function(index, value){
display[index]="none";
if($(this).is(":visible")){
display[index]="block";
}
});
$.ajax({
dataType: "json",
data: display,
url: "myfile.php",
cache: false,
method: 'GET',
success: function(rsp) {
alert(JSON.stringify(rsp));
var Content = rsp;
var Template = render('tsk_lst');
var HTML = Template({ Content : Content });
$( "#task_lists" ).html( HTML );
}
});
2 ответов
Я не совсем уверен, но я думаю, что вы, вероятно, удивлены тем, как массивы сериализованные в JSON. Давайте выделим проблему. Рассмотрим следующий код:
var display = Array();
display[0] = "none";
display[1] = "block";
display[2] = "none";
console.log( JSON.stringify(display) );
это будет напечатано:
["none","block","none"]
так JSON фактически сериализует массив. Однако то, что вы хотите увидеть, это что-то вроде:
{"0":"none","1":"block","2":"none"}
чтобы получить этот формат, который вы хотите сериализовать объект, а не массив. Поэтому давайте перепишем выше код следующим образом:
var display2 = {};
display2["0"] = "none";
display2["1"] = "block";
display2["2"] = "none";
console.log( JSON.stringify(display2) );
это напечатает внутри формат, который вы хотите.
вы можете поиграть с этим здесь:http://jsbin.com/oDuhINAG/1/edit?js, консоль
можно использовать JSON.stringify(object)
С объектом, и я только что написал функцию, которая рекурсивно преобразует массив в объект, как это JSON.stringify(convArrToObj(array))
, который является следующим кодом (более подробно можно найти на ответ):
// Convert array to object
var convArrToObj = function(array){
var thisEleObj = new Object();
if(typeof array == "object"){
for(var i in array){
var thisEle = convArrToObj(array[i]);
thisEleObj[i] = thisEle;
}
}else {
thisEleObj = array;
}
return thisEleObj;
}
чтобы сделать его более общим, вы можете переопределить