2012-10-18 47 views
0

我有一些麻煩讓這個Ajax調用工作。 ajax函數傳遞一個簡單的變量給我的python控制器,控制器返回查詢結果。我正在使用Web2py框架。我得到的錯誤:不能連接'str'和'NoneType'對象。這是代碼:Web2py - 不能連接'str'和'NoneType'對象

AJAX調用:

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

,這是蟒蛇控制器:

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) 

感謝您的幫助!對此,我真的非常感激。

+0

python或js正在產生該錯誤? – BostonJohn

+0

Python正在生成一個錯誤,變量類型爲None,這就是爲什麼它不能連接。在將它插入sql查詢之前,請打印變量的類型,然後鍵入cast或將其作爲字符串傳遞。 – ronak

回答

3

你看到Python的錯誤意味着zona值只是None。我想這是由於你錯誤地提出了AJAX請求。在提出請求時,您應該定義格式爲{ 'variable_name' : value }的數據。對於服務器端:請注意,request.varsgluon.storage.Storage字典式對象。

所以,要解決這個問題 - 通過刪除dataType: 'string',並將data設置爲{ 'zona' : selectedVal }之類的內容來修改您的AJAX請求。其次 - 使用request.vars['zona']獲取服務器端的值。第三 - 在進一步編寫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) 
相關問題