Web2py - 无法连接'str'和'NoneType'对象

时间:2012-10-18 20:51:38

标签: javascript python ajax json web2py

我有一些麻烦让这个ajax呼叫工作。 ajax函数将一个简单变量传递给我的python控制器,控制器返回查询结果。我正在使用Web2py框架。我得到的错误:无法连接'str'和'NoneType'对象。这就是代码:

Ajax Call:

<script>
function TestVolumen() {
    var selectVal = $('#zonas :selected').val();    
    $.ajax({
    data: selectVal ,
    url: '/shell/default/ajax2',
    type: 'POST',
    cache: false,
    dataType: 'string',
    success: function(request) {
    //console.log(request[0]);
    //console.log(request[0].zona);
    selectVal = $('#zonas :selected').val();

        for (x=0;x<request.length;x++){
            if (request[x].zona == selectVal ) {
            //alert(request[x].promedio);
            //alert(request[x].zona);
            $('div#tabs .vol').html(request[x].promedio.toFixed(4));

            }
        }

        }
    });
}
</script>

这是python控制器:

def ajax2():
import gluon.contrib.simplejson
zona = request.vars

queryvol = "select sells.product1 FROM site inner join zona on site.zone_number = zona.id inner join sells on sells.site = site.id WHERE zona.id =" + zona +" ;', as_dict = True"
vol=db.executesql(queryvol)

return gluon.contrib.simplejson.dumps(vol)

感谢您的帮助!!我真的很感激。

2 个答案:

答案 0 :(得分:3)

您看到的Python错误意味着zona的值只是None。我想这是因为您错误地提出了AJAX请求。发出请求时,您应该以{{1​​}}格式定义数据。对于服务器端:请注意{ 'variable_name' : value }gluon.storage.Storage类字典对象。

因此,要解决此问题,请移除request.vars并将dataType: 'string',设置为data之类的内容来修改您的AJAX请求。第二 - 使用{ 'zona' : selectedVal }获取服务器端的值。第三 - 在进一步编写Python代码之前,请仔细阅读记忆PEP8

答案 1 :(得分:0)

根据PEP 249,请用户绑定变量。

queryvol = """
    INSERT INTO [TABLENAME] 
    VALUES(%s, %s, %s, %s, %s, %s, %s, %d)
    )""" % (a, b, c, d, e, f, g, h, i)