我的jquery ajax成功
success: function(data) {
$('#someId').html(data);
}
我有一个名为_information.html.erb的部分文件
如何将我的ajax成功响应渲染到rails部分视图(information
)。
大多数资源显示的内容都是这样的
$('#holderDiv').empty().append('<ul> <%= j render @comments %> </li>')
但我对此并不满意。任何其他解决方法。
答案 0 :(得分:8)
<强>更新强> 这里有更多信息以回应您的评论。
首先请在Javascript上阅读此Rails Guide以获取更多信息。
update.js.erb是您的观点。而不是为您的视图提供update.html.erb文件,控制器中带有format.js的respond_to块将update.js.erb(格式化为javascript代码)发送回您的jquery函数。
update.js.erb可以包含纯JavaScript。但是它在被转换为javascript之前由服务器处理,因此您可以嵌入任何您想要的ruby代码。该ruby代码转换为javascript。
如果您使用Chrome开发者工具,则可以查看&#34; network&#34; 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。
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代码。这将适用于以下情况:
控制器:
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 %>')