我的 jquery ajax 成功为
success: function(data) {
$('#someId').html(data);
}
我有一个名为 _information.html.erb 的部分文件
我如何将我的 ajax 成功响应呈现给 rails 部分 View (
information
)。大多数资源都显示出这样的内容
$('#holderDiv').empty().append('<ul> <%= j render @comments %> </li>')
但我对此感到不舒服。任何其他方法来解决它。
最佳答案
更新
以下是针对您的评论的更多信息。
首先请阅读此Rails Guide在 Javascript 上了解更多信息。
update.js.erb 是你的观点。 Controller 中带有 format.js 的 respond_to 块将发送 update.js.erb(格式化为 javascript 代码)回您的 jquery 函数,而不是为您的 View 提供 update.html.erb 文件。
update.js.erb 可以包含纯 javascript。但是,它在转换为 javascript 之前由服务器处理,因此您可以嵌入任何您想要的 ruby 代码。该 ruby 代码被转换为 javascript。
如果您使用 chrome 开发人员工具,则可以在 jquery 调用运行后查看“网络”选项卡。您将看到一个新条目出现在您刚刚进行的 AJAX 调用中。如果单击该条目,您将看到返回的 javascript。
我已经稍微更新了下面的 update.js.erb 文件,以展示如何将常规 javascript 代码放入 .js.erb 文件中。第一行是javascript。第二行是服务器将其转换为 javascript 的 ruby 代码。因此,当它到达您的浏览器时,整个 update.js.erb 文件已转换为 javascript。
希望有帮助...
原答案如下:
选项 1:
假设您的 jQuery 成功函数与 Controller 操作的成功完成相关(我将在我的示例中使用编辑操作),您将创建一个名为 update.js.erb 的 View ,该 View 将在成功编辑后调用。
Controller :
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。
update.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 代码。这将适用于以下情况:
Controller :
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
create.js.erb:
$('#holderDiv').empty().append('<%= j render @comments %>')
关于ruby-on-rails - jquery ajax 使用 Rails View 渲染部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19129285/