之前我没有尝试过LOAD(),但是我无法让它工作。我目前正在使用web2py2.8.2并使用内置服务器在localhost上进行测试。
这是我的简化示例
@auth.requires_login()
def monitor_manage():
""" Controller for Monitor page """
return dict()
@auth.requires_login()
def statehouse_poll():
""" Controller for Monitor page """
import time
return dict(state=dict(timestamp=time.time()))
{{extend 'layout.html'}}
<h2>Monitor System Status</h2>
<p>Live monitoring of system state.
</p>
<div id="statehouse_component">
</div>
{{=LOAD(c='default', f='statehouse_poll.load', ajax=True,
target="statehouse_component",
user_signature=True,
timeout=2000, times=100) }}
{{=state}}
如果我浏览到default / statehouse_poll,我会得到预期的结果,例如
timestamp : 1391807454.990959
但浏览到默认/ monitor_manage只显示
loading...
检查响应html显示web2py正在发送
<div data-w2p_remote="/arm_app/default/statehouse_poll.load?_signature=4addc7e2cd96daa1fbc88c233b163838d880c8c3" data-w2p_timeout="2000" data-w2p_times="100" id="statehouse_component">loading...</div>
我做错了什么?
编辑!:我在Massimo的web2py组中发现了一条消息,建议从欢迎应用程序复制web2py.js文件以修复LOAD()的问题。这样做了,但对我的情况没有影响。
EDIT2:Per Anthony的建议我在Chrome DevTools中寻找错误。每隔2秒发现以下重复出错。
Uncaught TypeError: Object function (a,b){return new e.fn.init(a,b,h)} has no method 'parseHTML' web2py.js:382
$.web2py.web2py.updatePage web2py.js:382
$.ajax.complete web2py.js:311
n jquery.js:2
o.fireWith jquery.js:2
w jquery.js:4
d
答案 0 :(得分:0)
- 我能够通过用web2py2.8.2附带的更新版本(1.10.2)替换应用程序的旧版jquery.js(1.7.1)来解决ajax问题。这提供了较新的web2py.js所需的parseHTML()函数,并且定时的LOAD现在按预期运行。
这样做会造成superfish.js的次要问题,因为它通过检查在版本1.9中不推荐使用并从jQuery中删除的browser.msie来测试MSIE。更新到最新的超级鱼修复了。
我现在暂时接受我自己的答案,希望web2py团队的某个人能够建议更自动化的迁移策略,以便在旧的web2py应用程序中更新客户端依赖关系。
答案 1 :(得分:0)
我遇到了类似的问题,在使用 LOAD() 时,我在呈现的页面中只得到“...loading”,而不是应该加载的部分。就我而言,问题源于未使用 layout.html,因为我在其位置构建了替代 base.html。我的 base.html 没有包含 web2py 的 'web2py_ajax.html'——它在 layout.html 的 head 部分作为 {{include 'web2py_ajax.html'}} 找到。当我将它包含在我的 base.html 中时,问题就解决了。我相信 web2py_ajax.html 包含 web2py 依赖于 LOAD() 的 javascript。
我怀疑此建议不会帮助解决此线程的具体问题,但可以帮助人们解决类似问题。