4

我的 jquery ajax 成功为

success: function(data) {
    $('#someId').html(data);
}

我有一个名为 _information.html.erb 的部分文件

我如何将我的 ajax 成功响应呈现给 rails 部分视图(information)。

大多数资源都显示这样的内容

$('#holderDiv').empty().append('<ul> <%= j render @comments %> </li>')

但我对此感到不舒服。任何其他方法来解决它。

4

1 回答 1

8

更新 这里有一些更多信息以回应您的评论。

首先,请阅读此Rails Guide on Javascript 以获取更多信息。

update.js.erb 是你的观点。控制器中带有 format.js 的 respond_to 块不会为您的视图提供 update.html.erb 文件,而是将 update.js.erb(格式化为 javascript 代码)发送回您的 jquery 函数。

update.js.erb 可以包含纯 javascript。但是,它在转换为 javascript 之前由服务器处理,因此您可以嵌入任何您想要的 ruby​​ 代码。该红宝石代码被转换为javascript。

如果您使用 chrome 开发人员工具,您可以在 jquery 调用运行后查看“网络”选项卡。您将看到您刚刚进行的 AJAX 调用出现了一个新条目。如果单击该条目,您将看到返回的 javascript。

我已经稍微更新了下面的 update.js.erb 文件,以展示如何将常规 javascript 代码放入 .js.erb 文件中。第一行是javascript。第二行是服务器转换成 javascript 的 ruby​​ 代码。因此,当它到达您的浏览器时,整个 update.js.erb 文件已被转换为 javascript。

希望有帮助...

原答案如下:

选项1:

假设您的 jQuery 成功函数与控制器操作的成功完成相关联(我将在示例中使用编辑操作),您将创建一个名为 update.js.erb 的视图,该视图将在成功编辑后调用。

控制器:

if @user.update_attributes(params[:user])
    respond_to do |format|
        format.html { redirect_to @user, notice: "Successfully updated user." }
        format.js
    end
else
    # ...
end

因为这是从 javascript 调用的,并且您在 respond_to 块中有 format.js,所以将自动调用 update.js.erb。

更新.js.erb:

console.log('see... this is a regular javascript call.');
<%= render partial: 'information', format: 'js' %>

选项 2

您包含的片段:

$('#holderDiv').empty().append('<ul> <%= j render @comments %> </li>')

仅适用于 js.erb 文件,其中嵌入的 ruby​​ 代码首先被处理,然后转换为 javascript 代码。这将适用于以下情况:

控制器:

def create
    user = User.new(params[:user])

    respond_to do |format|
        if @user.save
            @comments = 'some comments to display!'
            format.js
        else
            # ...
        end
    end
end

创建.js.erb:

$('#holderDiv').empty().append('<%= j render @comments %>')
于 2013-10-02T06:10:57.580 回答