我尝试将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
但没有任何东西被传送到jsontest函数。任何人都可以解释我有什么问题?我的网址可能不好......等等,谢谢你的回答......
答案 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')}}'
有关详细信息,请参阅dispatching和URL()
function上的图书部分。
注意,您的代码假定存在/views/default/jsontest.json视图文件或您已启用generic.json视图(有关详细信息,请参阅here)。但是,jsontest()函数实际上并不向视图返回任何内容,也不会对JSON数据执行任何操作。