Rails 3 中类似 UJS 的 AJAX 响应

发布于 2024-11-16 00:56:27 字数 708 浏览 0 评论 0原文

Rails 3 使用 UJS 方法,该方法允许处理来自 JavaScript 代码的 AJAX 响应。

$("form").live("ajax:success", function(data, status, xhr){
    $(".target").html(data.myHTML);
});

Rails 3 中的视图应该如何填充“数据”对象,以便我可以检查来自 JavaScript 的内容?

使用“js.erb”或“js.haml”进行常规渲染会导致 JavaScript 中的“data”局部变量“未定义”。

当然,在视图中,我可以使用一些全局变量,如下所示 ("js.haml"):

- c = escape_javascript(render "search_result")
:plain
  var ajaxResponse = "#{c}";

... 并从 JavaScript 处理程序中调用它,如下所示:

$("form").live("ajax:success", function(data, status, xhr){
    $(".target").html(ajaxResponse);
});

... 但它破坏了封装。

理想的方法是使用“数据”局部变量。

那么,视图应该是什么样子呢?

Rails 3 uses UJS approach, which allows to handle AJAX responses from JavaScript code.

$("form").live("ajax:success", function(data, status, xhr){
    $(".target").html(data.myHTML);
});

How view in Rails 3 should look like to fill "data" object, so i can inspect is from JavaScript ?

Regular rendering, using "js.erb", or "js.haml" results "data" local variable in JavaScript "undefined".

Of course, in the view, i can use some global variable, like following ("js.haml"):

- c = escape_javascript(render "search_result")
:plain
  var ajaxResponse = "#{c}";

… And call it from JavaScript handler, like this:

$("form").live("ajax:success", function(data, status, xhr){
    $(".target").html(ajaxResponse);
});

… but it breaks incapsulation.

Ideal way would be using "data" local variable.

So, how the view should look like ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文