In jQuery, if you do:

    data: {json1: JSON.stringify([1, 2, 3])},
    contentType: 'application/json'

Then in the controller, request.post_vars.json1 will be the Python list, [1, 
2, 3] -- no need to do any JSON conversion on the server side. Note, the 
JSON must be an object with keys, not simply an array -- otherwise web2py 
will not treat it as JSON and convert it to a Python data structure. If the 
JSON has keys, the keys will become the keys of request.post_vars.

Anthony

On Sunday, February 4, 2018 at 9:41:48 PM UTC-5, lucas wrote:
>
> hey all and anthony,
>
> i've tried a bunch of things, including your suggestion above.  here are 
> my results and this is using web2py 2.16.1.  on the client side, under the 
> view's header, i have:
>
>             a = getArray();
>             //displays the grabbed array
>             
> //jQuery('div#snapshot_matrix').html(snapshot_table+'<br/><pre>'+JSON.stringify(a,
>  
> null, '\t')+'</pre>').css('display', 'block');
>             jQuery.post({url:"{{=URL(c='main321911', 
> f='ajaxAnalysesSummary1')}}", data:{ 'json1':JSON.stringify([1, 2, 3]) } 
> }).done(function (t) {
>                 
> //jQuery('div#snapshot_matrix').html('<pre>server_return:\n'+JSON.stringify(t,
>  
> null, '\t')+'</pre>').css('display', 'block');
>                 
> jQuery('div#snapshot_matrix').html('<pre>server_return:\n'+t+'</pre>').css('display',
>  
> 'block');
>
> where a or getArray() just reads the values of various inputs and slams 
> them into a javascript/json object with the declaration "var a = { };" 
> which to me is similar to a python dict.  the jQuery.post is the method i 
> used to transfer the array to the server and under the post function i've 
> tried various permutations on data with and without the option 
> ..."contentType: 'application/json', "... present or not.  the various 
> permutation of data were:
>
> data: a, 
> data: JSON.stringify(a), 
> data: { json1:[1, 2, 3] }, 
> data: { 'json1':[1, 2, 3] }, 
> data: { json1:JSON.stringify([1, 2, 3]) }, 
> data: { 'json1':JSON.stringify([1, 2, 3]) }, 
>
> and many others.  on the server side, i just have:
>
> def ajaxAnalysesSummary1():
>     #from gluon.contrib import simplejson
>     dct = { 'ajaxAnalysesSummary1':True }
>     get = request.vars
>     dct['len1'] = len(get)
>     dct['type1'] = type(get)
>     dct['get1'] = get
>     get = request.post_vars
>     dct['len2'] = len(get)
>     dct['type2'] = type(get)
>     dct['get2'] = get
>
>     get = loads(request.vars.json1)
>     dct['len3'] = len(get)
>     dct['type3'] = type(get)
>     dct['get3'] = get
>     get = request.post_vars.json1
>     dct['len4'] = len(get)
>     dct['type4'] = type(get)
>     dct['get4'] = get
>     return DIV(dct)
>
> where the client will display the dct of type dict passed to DIV.
>
> the only way that consistently works is when i use JSON.stringify(a) on 
> the client side, both 2nd and last, worked under the above data options, 
> and loads on the server side.  the loads will convert the pure "a" json 
> object, in the 2nd data option, to a proper addressable python dict, or as 
> json1 variable converted with the python dict under that variable.  the 
> values of the dict still have to be processed into int or double depending 
> on their twins on the db side.
>
> but in every permutation, setting the option of "contentType: 
> 'application/json'" returned no data under request.vars or 
> request.post_vars.
>
> so, i believe i go with the working model of JSON.stringify on the client 
> side with loads on the server side.  makes sense and i believe a solid 
> solution.
>
> lucas
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to