1

我试图以与以下相同的方式将对象从视图发送到控制器(Web2py):

如何使用 JQuery Ajax 将 JSON 对象传递给 web2py

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()

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

但没有任何东西传输到 jsontest 函数。谁能解释我有什么问题?我觉得我的网址可能不好......等等谢谢你的回答......

4

1 回答 1

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

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

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

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

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

有关更多详细信息,请参阅有关调度URL()函数的书籍部分。

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

于 2013-01-10T16:15:44.203 回答