Clara, May it be possible that specifying datatype in your ajax call be the poblem? You stringify if then you say that it is an json type to ajax...
I would try by removing the datatyep: 'json' line completly in the above and see if request.vars.input is now a plain string of the json you stringify. Then json.load should work I guess. Richard On Fri, Feb 20, 2015 at 9:43 PM, clara <[email protected]> wrote: > Hello all, > > Thanks all for the responses and sorry for the delay in my response. I was > struggling with this and I don't get to solve it yet. The data (string) > passed to the controller as *request.vars.input *looks good but it fails > when I try to load it with json.loads. > > This is what I have at this point: > > *Controller that is passed to ajax call:* > > def test(): > print "test called" > print '-'*40 > print 'request.vars:' > print request.vars > print '-'*40 > print 'request.vars.input:' > print request.vars.input > print '-'*40 > print type(request.vars.input) > try: > data = json.loads(request.vars.input) > except: > print "json.loads failed" > return 'ok' > > *Print-out when test controller is called by ajax:* > test called > ---------------------------------------- > request.vars: > <Storage {'input': '{"input":[{"the_owner":1,"category":1,"name":"La > marcha del oro","price":44.45,"id":1,"quantity":100 > },{"the_owner":3,"category":3,"name":"Toy > Story","price":34.56,"id":2,"quantity":23},{"the_owner":2,"category":2,"name": > "La > Sirenita","price":56.67,"id":3,"quantity":10},{"the_owner":null,"category":null,"name":null,"price":null,"id":null," > quantity":null}]}'}> > ---------------------------------------- > request.vars.input: > {"input":[{"the_owner":1,"category":1,"name":"La marcha del > oro","price":44.45,"id":1,"quantity":100},{"the_owner":3,"ca > tegory":3,"name":"Toy > Story","price":34.56,"id":2,"quantity":23},{"the_owner":2,"category":2,"name":"La > Sirenita","price > > ":56.67,"id":3,"quantity":10},{"the_owner":null,"category":null,"name":null,"price":null,"id":null,"quantity":null}]} > ---------------------------------------- > <type 'str'> > False > json.loads failed > > *And the JS code (I highlghted the important part)* > > {{extend 'layout.html'}} > {{from gluon.serializers import json}} > > <script type="text/javascript"> > {{=ASSIGNJS(data = data)}} > {{=ASSIGNJS(grid = grid)}} > > $(document).ready(function () { > var > container1 = document.getElementById('example1'), > settings1 = { > data: grid, > minSpareRows: 1, > contextMenu: true, > }, > hot1; > > hot1 = new Handsontable(container1, settings1); > hot1.render(); > var test = {'myvar':'soy una variable'}; > $("#save").click(function() > {var tableData = JSON.stringify(hot1.getData()); > var input = JSON.stringify({"input": > hot1.getData()}); > * $.ajax({* > * url:'mygrid/test',* > * data: {'input':input},* > * datatype: 'json',* > * type: 'post'* > > * });* > alert(input);}); > > }); > </script> > > <div id="example1" class="handsontable"></div> > <button name="save" id="save">Save</button> > <div id="target"></div> > > I will keep looking into it. If anyone has any ideas or tests, I will try > them. > > Thanks again, > > C. > > > El viernes, 20 de febrero de 2015, 15:19:55 (UTC-3), clara escribió: > >> Hello, >> >> I am making an Ajax call and calling a controller with the json data I >> need to process in the controller. >> >> The problem I am having (and I am sure the answer will be simple and I >> will hate myself for the silly question ) is that if I select >> request.vars.input, its value is not a json object anymore so a loads >> method will fail. It is a string object and if I try to eval(it) I get an >> error. So even when the data is right there I can not use it in the >> controller. >> Any ideas will be more than welcome! >> >> (The controller and its print outs are shown bellow.) >> >> Thanks, >> Clara >> >> def test(): >> print "test called" >> print "test called" >> print 'request.vars' >> print request.vars >> print 'request.vars.input' >> >> Here is what the controller prints out: >> >> test called >> request.vars >> <Storage {'input': '[{"the_owner":1,"category":1,"name":"La marcha del >> oro","price":44.45,"id":1,"quantity":100},{"the_owner":3,"c >> ategory":3,"name":"Toy Story","price":34.56,"id":2," >> quantity":23},{"the_owner":2,"category":2,"name":"La >> Sirenita","price":56.67," >> id":3,"quantity":10},{"the_owner":null,"category":null," >> name":null,"price":null,"id":null,"quantity":null}]'}> >> request.vars.input >> [{"the_owner":1,"category":1,"name":"La marcha del >> oro","price":44.45,"id":1,"quantity":100},{"the_owner":3, >> "category":3,"name":"T >> oy >> Story","price":34.56,"id":2,"quantity":23},{"the_owner":2,"category":2,"name":"La >> Sirenita","price":56.67,"id":3,"quantity":10} >> ,{"the_owner":null,"category":null,"name":null,"price":null, >> "id":null,"quantity":null}] >> >> >> -- > 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 [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- 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 [email protected]. For more options, visit https://groups.google.com/d/optout.

