Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert javascript object or array to json for ajax data

So I'm creating an array with element information. I loop through all elements and save the index. For some reason I cannot convert this array to a json object!

This is my array loop:

var display = Array(); $('.thread_child').each(function(index, value){    display[index]="none";    if($(this).is(":visible")){       display[index]="block";    } }); 

I try to turn it into a JSON object by:

data = JSON.stringify(display); 

It doesn't seem to send the proper JSON format!

If I hand code it like this, it works and sends information:

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"}; 

When I do an alert on the JSON.stringify object it looks the same as the hand coded one. But it doesn't work.

I'm going crazy trying to solve this! What am I missing here? What's the best way to send this information to get the hand coded format?

I am using this ajax method to send data:

$.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 );         }     }); 

Using GET method because I'm displaying information (not updating or inserting). Only sending display info to my php file.


END SOLUTION


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 );         }     }); 
like image 875
Christine Wilson Avatar asked Nov 14 '13 05:11

Christine Wilson


People also ask

How do you convert JavaScript data into JSON?

JSON.stringify() The JSON.stringify() method converts a JavaScript value to a JSON string, optionally replacing values if a replacer function is specified or optionally including only the specified properties if a replacer array is specified.

Can you convert array to JSON?

You convert the whole array to JSON as one object by calling JSON. stringify() on the array, which results in a single JSON string. To convert back to an array from JSON, you'd call JSON. parse() on the string, leaving you with the original array.

Can we convert data into JSON if we have data stored in a JavaScript object?

Answer: Use the JSON. stringify() Method You can use the JSON. stringify() method to easily convert a JavaScript object a JSON string.


1 Answers

I'm not entirely sure but I think you are probably surprised at how arrays are serialized in JSON. Let's isolate the problem. Consider following code:

var display = Array(); display[0] = "none"; display[1] = "block"; display[2] = "none";  console.log( JSON.stringify(display) ); 

This will print:

["none","block","none"] 

This is how JSON actually serializes array. However what you want to see is something like:

{"0":"none","1":"block","2":"none"} 

To get this format you want to serialize object, not array. So let's rewrite above code like this:

var display2 = {}; display2["0"] = "none"; display2["1"] = "block"; display2["2"] = "none";  console.log( JSON.stringify(display2) ); 

This will print in the format you want.

You can play around with this here: http://jsbin.com/oDuhINAG/1/edit?js,console

like image 70
Shital Shah Avatar answered Oct 11 '22 22:10

Shital Shah