Javascript不会加载到包含jQuery mobile的链接

时间:2015-05-13 09:03:07

标签: javascript python html jquery-mobile flask

编辑:在尝试找到解决方案时,主题发生了一些变化 - TL; DR:请参阅答案。对于所有对该主题的开发感兴趣的人,请继续; - )

标题可能令人困惑,但我不知道如何用更好的词语表达 - 让我说我有一个简单的视图功能:

@app.route('/chart')
def chart():

return render_template('chart.html')

如果我现在直接在浏览器中打开此视图,通过“http://localhost:5000/start”,它可以正常工作 - javascript内容按预期工作(绘制图表,使用滑块调用不同的视图等)。

但是,使用其他模板中的链接不起作用,例如我有一个根视图:

@app.route('/')
def index():
    return render_template('index.html')

并在此index.html内部指向'/ chart'的链接:

 <a href="{{ url_for('chart') }}">Chart</a>

现在,按下该链接,它加载我的模板,我可以看到基本的html内容,但javascript代码根本没有加载/启动(也是浏览器收到的源代码是正确的)。在这两种情况下,服务器都会收到相同的命令:

127.0.0.1 - - [13/May/2015 10:48:18] "GET /chart HTTP/1.1" 200 -

但是,只有我直接在浏览器中打开它,它才会按预期工作。

我的链接/重定向有问题吗?

编辑:我找到导致问题的单行:在我的index.html我正在加载jQuery mobile:

<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>

删除这一行,一切都按预期工作 - 但当然我不想包含它,为什么以及如何影响链接行为?

1 个答案:

答案 0 :(得分:4)

默认情况下,jQuery使用Ajax来处理页面请求。这允许页面之间的平滑过渡(没有页面刷新感觉),但它也意味着只加载所请求页面的主体 - 因此标题中不包含javascript库。

因此,必须使用data-ajax="false"属性将所有必需的javascript包含在原始网站的标头中,或者必须在没有ajax的情况下完成页面请求。这将进行真正的页面刷新,而不进行ajax转换。

有关详细信息,请参阅this