【问题标题】:How to invoke a pyramid view using ajax如何使用 ajax 调用金字塔视图
【发布时间】:2014-08-03 08:50:48
【问题描述】:

我有一些金字塔代码在锚标记的“href=”部分使用“request.route_path()”来打开我网页上的幻灯片。在视图处理程序中,我检查了名为“render_to_response()”的“request.is_xhr”,因此我可以适当地更改我的渲染器。当通过 request.route_path() 访问视图时,这可以正常工作。

我现在需要稍微更改一下功能,以便我可以首先通过 jQuery 检查用户是否在移动设备上。所以'href='现在调用一个javascript函数,然后使用Ajax访问视图处理程序。基本上,我有 request.route_path('slide_in', arg1=data, arg2=data2) 现在有一个 ajax 调用,其中 url 是 '/slide_in/data/data2'。这似乎在调用视图处理程序并且 request.is_xhr 检查设置为 True 时起作用,因为它应该是。我遇到的问题是对 render_to_response() 的调用没有失败,但似乎也没有做任何事情,因为我在使用 Ajax 时最终得到了一个空白页。它适用于原始的 'request.route_path()'。

有没有人知道为什么会这样?在这两种情况下,标头和所有内容都相同,并且请求对象有效,但 Ajax 发起的调用会导致空白页面。感谢您的任何想法,因为我是新手,并且尝试了很多不同的想法,但很卡住。

【问题讨论】:

  • 向我们展示您认为可调用的代码
  • 我将查看 Sergey 的信息,并尝试我想到的另一件事,但如果我不成功,我会发布代码。感谢您抽出宝贵时间阅读问题。

标签: jquery pyramid


【解决方案1】:

看看我的almost rant-like answer to this question。重点是 - 您的应用程序会生成一个文本块,其中包括 request.route_path() 的输出,它只是一个字符串。 JavaScript 无法判断该字符串是否由某个函数生成。

URL 是由request.route_path() 生成或简单地手动输入的事实绝对不会对该 URL 调用的 Pyramid 视图的行为产生任何影响 - 除非 URL 实际上不同。可以通过比较这些 URL 轻松检查。

几个建议:

  • Pyramid 有一个 xhr view predicate 可以让您避免手动检查和render_to_response - 相反,您可以使用不同的渲染器拥有两个独立的函数。

    @view_config(..., xhr=True, renderer='json')
    def serve_json(...):
        ...
        return {"hello": "world"}
    
    @view_config(..., xhr=False, renderer='mytemplate.mak')
    def serve_html(...):
        ...
        return {"hello": "world"}
    
  • 有一个不错的user-agents Python 库可以让您在Python 中进行检查,所以也许您根本不需要那个Ajax。您甚至可以使用该库创建自定义视图谓词。

【讨论】:

  • 谢谢你,谢尔盖。今天我会研究你的建议。感谢您的意见。
  • 谢谢,@Sergey。您的链接答案以及这个(stackoverflow.com/a/12627478/443594)向我清楚地表明我误解了一些事情。我最终创建了一个 jquery onClick 侦听器(而不是在锚标记中调用 javascript,正如我的链接所建议的那样)。然后,在事件处理程序中,我实现了 ajax 调用。但是,我看到空白页的主要原因是以前的程序员正在使用对 jquery 的“load()”函数的调用,我错过了该函数正在准备必要的 html。我现在有工作代码。再次感谢!
猜你喜欢
  • 2014-07-02
  • 2014-07-16
  • 2012-11-18
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
相关资源
最近更新 更多