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.

Reply via email to