我在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的数据?
由于
答案 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.