如何从服务器获取更新数据而无需在web2py中重新加载页面

时间:2011-10-28 08:05:26

标签: python ajax database web2py

我在web2py应用程序中创建了搜索栏功能,从数据库中获取结果。但是,如果在页面启动时更改了数据库的内容,则需要重新加载以反映不同的内容。 我的问题是如何在不重新加载页面的情况下将数据库内容读入javascript变量,通过ajax或json或其他方式。

目前我使用这样的控制器:

def testDB():
        valA=[]
        valB=[]
        valC=[]
        for x in db().select(db.products.ALL):
            valA.append(x.prdA)
            valB.append(x.prdB)
            valC.append(x.prdC)
        return dict(VA=valA, VB=valB, VC=valC)

使用视图获取数据如下:

{{valA=VA}} {{valB=VB}} {{valC=VC}}
A = {{=XML(response.json(valA))}}
B = {{=XML(response.json(valB))}}
C = {{=XML(response.json(valC))}}

使用变量。这样可以正常使用加载页面时的数据,但不会刷新以适应数据库的更改。为了获取新数据,我尝试了:

function loadFromDB(){
jQuery.ajax({
type:"POST",
    url:'testDB',
    success: function(msg){      
    {{
    valA=VA
    valB=VB
    valC=VC
    }}
    A = {{=XML(response.json(valA))}}
    B = {{=XML(response.json(valB))}}
    C = {{=XML(response.json(valC))}}
    },
    error: function(errormessage){alert("Error in retrieving from database");}
 });}

但这似乎使用了旧的VA / B / C变量,因为它没有反映数据库的任何变化。我已尝试过其他一些方法,例如A = VA,在{{}} breackets之外,但尚未找到工作方式。我应该如何检索python函数返回到javascript的数据?

由于

1 个答案:

答案 0 :(得分:0)

假设您在loadFromDB视图中定义了testDB功能,那么{{ }}loadFromDB内的所有内容都将在创建原始页面时填写调用testDB。 web2py模板代码不会在客户端使用Javascript执行 - 它用于在服务器端生成初始Javascript(最初加载页面时)。

如果您希望loadFromDb对Ajax调用返回的数据执行某些操作,则必须在Javascript中编写逻辑。注意,jQuery.ajax success函数将返回的数据作为第一个参数,如下所示:

jQuery.ajax({
    [snip]
    success: function(data) {
        [JS code to do something with the returned data]
    },
    etc.