将对象从视图发送到Web2py中的函数控制器

时间:2013-01-10 15:41:26

标签: jquery ajax json web2py

我尝试将un对象从视图发送到控制器(Web2py),其方式与:

相同

How to pass a JSON object to web2py using JQuery Ajax

ajax部分是:

var testObject = {};
testObject.value1 = "value1value!";
testObject.value2 = "value2value!";

var DTO = { 'testObject' : testObject };

var data = $.toJSON(DTO);    //Using the toJSON plugin by Mark Gibson

 $.ajax({
    type: 'POST',
    url: '/Myapplication/controllers/jsontest.json',
    contentType: "application/json; charset=utf-8", 
    data: data,
    dataType: 'json',
success:  function(data){  alert('yay'); }
});

并且函数jsontest位于/​​Myapplication/controllers/default.py我有

def jsontest():
   import gluon.contrib.simplejson
   data = gluon.contrib.simplejson.loads(request.body.read())
   return dict()

做同样的测试我在var data = $.toJSON(DTO);得到了一个好的字符串。我在https://sites.google.com/site/jollytoad/json.js?attredirects=0

获得了json.js

但没有任何东西被传送到jsontest函数。任何人都可以解释我有什么问题?我的网址可能不好......等等,谢谢你的回答......

1 个答案:

答案 0 :(得分:2)

url: '/Myapplication/controllers/jsontest.json'

以上不是有效的web2py URL(“controllers”是保存控制器文件的文件夹的名称,但它不会出现在URL中)。正确的URL将是:

url: '/Myapplication/default/jsontest.json'

如果Javascript位于web2py视图文件中(而不是单独的.js文件),那么生成URL的首选方法是通过URL()函数:

url: '{{=URL('default', 'jsontest.json')}}'

有关详细信息,请参阅dispatchingURL() function上的图书部分。

注意,您的代码假定存在/views/default/jsontest.json视图文件或您已启用generic.json视图(有关详细信息,请参阅here)。但是,jsontest()函数实际上并不向视图返回任何内容,也不会对JSON数据执行任何操作。