mjsulliv Posted July 19, 2011 Share Posted July 19, 2011 Hello All. I've been hammering on some code that I thought would work but can't seem to get it to do so. I want to dynamically build the JSON data I send when the OnClick of a check box is done. The function callsseem to work fine but I can't seem to successfully substitute the JSON data as a js var. Below is a snippet of code that I hope demonstrates what I'm trying to do. Any help would be appreciated. function BuildJsonData(){ var jsonData = "{"; var recdNum_ckBx = document.getElementById('selectMenu_RecdNum_CkBx'); if(recdNum_ckBx.checked == true){ jsonData = '"RecdNum_ckBx" : "RecdNum_ckBx"'; } var recdTimeStmp_CkBx = document.getElementById('selectMenu_RecdTimeStmp_CkBx'); if(recdTimeStmp_CkBx.checked == true){ jsonData = jsonData + "," + ' "RecdTimeStmp_ckBx" : "RecdTimeStmp_ckBx"'; } jsonData = jsonData + "}"; $.getJSON("selectMenu_BldSelPhrase.php", { jsonData; } );} Link to comment Share on other sites More sharing options...
jeffman Posted July 19, 2011 Share Posted July 19, 2011 You are correct to build your string using expressions likejsonData = jsonData +It looks like your second assignment to jsonData does not do that, jsonData = '"RecdNum_ckBx" : "RecdNum_ckBx"';causing the "{" character to be overwritten. I personally like to use the += operator. Link to comment Share on other sites More sharing options...
mjsulliv Posted July 19, 2011 Author Share Posted July 19, 2011 You are correct to build your string using expressions likejsonData = jsonData +It looks like your second assignment to jsonData does not do that, jsonData = '"RecdNum_ckBx" : "RecdNum_ckBx"';causing the "{" character to be overwritten. I personally like to use the += operator.Thanks, I'll make the correction and give it a try. Link to comment Share on other sites More sharing options...
mjsulliv Posted July 19, 2011 Author Share Posted July 19, 2011 You are correct to build your string using expressions likejsonData = jsonData +It looks like your second assignment to jsonData does not do that, jsonData = '"RecdNum_ckBx" : "RecdNum_ckBx"';causing the "{" character to be overwritten. I personally like to use the += operator.I've corrected the code:function BuildJsonData(){ var jsonData = "{"; var recdNum_ckBx = document.getElementById('selectMenu_RecdNum_CkBx'); if(recdNum_ckBx.checked == true){ jsonData = jsonData + '"RecdNum_ckBx" : "RecdNum_ckBx"'; a = 1; // line for debug breakpoint } var recdTimeStmp_CkBx = document.getElementById('selectMenu_RecdTimeStmp_CkBx'); if(recdTimeStmp_CkBx.checked == true){ jsonData = jsonData + "," + ' "RecdTimeStmp_ckBx" : "RecdTimeStmp_ckBx"'; a = 1; // line for debug breakpoint } jsonData = jsonData + "}"; return jsonData; According to Netbeans debugger what I get being passed in the #_GET array is:[{"RecdNum_ckBx"_:_"RecdNum_ckBx",_"RecdTimeStmp_ckBx"_:_"RecdTimeStmp_ckBx"}]Where did the "_" characters come from? And because of them the JSON data is not being parsed correctly. I expect this code would have generated two $GET array values$GET[RecdNum_ckBx] having the value: "RecdNum_ckBx"$GET[RecdTimeStmp_ckBx] having the value: "RecdTimeStmp_ckBx"Any ideas? Link to comment Share on other sites More sharing options...
thescientist Posted July 19, 2011 Share Posted July 19, 2011 what does jsonData look like before you return it from the function? Link to comment Share on other sites More sharing options...
jeffman Posted July 19, 2011 Share Posted July 19, 2011 Are you passing your values through encodeURIComponent before sending them through AJAX? Link to comment Share on other sites More sharing options...
justsomeguy Posted July 19, 2011 Share Posted July 19, 2011 What does the $.getJSON function do? Are you sure that expects a JSON string and not an object? If jsonData is a string, then this syntax looks strange to me: $.getJSON("selectMenu_BldSelPhrase.php", { jsonData; } ); That says that you're calling the $.getJSON function, and you're passing it a string filename, and then an object that contains a single unnamed property, which is a string. I don't even think that will parse, you need to give the property a name. The semicolon after jsonData also doesn't belong there.If your library, whether that is jQuery or mootools or whatever, has support for JSON, then you can probably build an object and then convert the object to a JSON string instead of trying to build the JSON string yourself. Link to comment Share on other sites More sharing options...
mjsulliv Posted July 19, 2011 Author Share Posted July 19, 2011 what does jsonData look like before you return it from the function?in Firebug: inside the function: "{"RecdNum_ckBx" : "RecdNum_ckBx", "RecdTimeStmp_ckBx" : "RecdTimeStmp_ckBx"}"back in the calling code: "{"RecdNum_ckBx" : "RecdNum_ckBx", "RecdTimeStmp_ckBx" : "RecdTimeStmp_ckBx"}" Link to comment Share on other sites More sharing options...
mjsulliv Posted July 19, 2011 Author Share Posted July 19, 2011 Are you passing your values through encodeURIComponent before sending them through AJAX?when I pass it through encodeURIComponent() I see the string as modified by the encoding but it makes no difference in what appears at the server. Link to comment Share on other sites More sharing options...
mjsulliv Posted July 19, 2011 Author Share Posted July 19, 2011 What does the $.getJSON function do? Are you sure that expects a JSON string and not an object? If jsonData is a string, then this syntax looks strange to me: $.getJSON("selectMenu_BldSelPhrase.php", { jsonData; } ); That says that you're calling the $.getJSON function, and you're passing it a string filename, and then an object that contains a single unnamed property, which is a string. I don't even think that will parse, you need to give the property a name. The semicolon after jsonData also doesn't belong there.If your library, whether that is jQuery or mootools or whatever, has support for JSON, then you can probably build an object and then convert the object to a JSON string instead of trying to build the JSON string yourself. You are right, the semicolon is wrong and is not really in the code i'm running; probably vestigial from a early cut and paste.I'm using jQuery. What I think the function is expecting is a JSON object. How would i make the object instead of a string? Link to comment Share on other sites More sharing options...
justsomeguy Posted July 19, 2011 Share Posted July 19, 2011 var obj = { RecdNum_ckBx: "value 1", RecdTimeStmp_ckBx: "value 2"}; That's a generic object with the named properties and their values. jQuery should have a method for converting that object to a JSON string. I don't use jQuery so I'm not sure what the syntax is, but it may be something like this:var json = obj.toJSON();var json = $.stringify(obj);"stringify" is a common name for turning a Javascript object into a JSON string. Turning the string back into an object is parsing.From what I can tell, strangely enough, I don't think jQuery includes a way to serialize an object. You can parse a string, but you can't serialize an object. That's a little odd, the people here say to use an external library for that.http://stackoverflow.com/questions/191881/...-json-in-jquery Link to comment Share on other sites More sharing options...
mjsulliv Posted July 20, 2011 Author Share Posted July 20, 2011 var obj = { RecdNum_ckBx: "value 1", RecdTimeStmp_ckBx: "value 2"}; That's a generic object with the named properties and their values. jQuery should have a method for converting that object to a JSON string. I don't use jQuery so I'm not sure what the syntax is, but it may be something like this:var json = obj.toJSON();var json = $.stringify(obj);"stringify" is a common name for turning a Javascript object into a JSON string. Turning the string back into an object is parsing.From what I can tell, strangely enough, I don't think jQuery includes a way to serialize an object. You can parse a string, but you can't serialize an object. That's a little odd, the people here say to use an external library for that.http://stackoverflow.com/questions/191881/...-json-in-jquery Thank you. Your insights are helpful. I found description of obj to string and back at: http://www.json.org/js.htmlI'll start playing w/ these. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.