当前位置: 首页 > 面试题库 >

Rails Ajax:.js.erb呈现为文本,而不是JS

濮丰
2023-03-14
问题内容

我在用rails3呈现Java脚本时遇到了麻烦(如果相关,我使用JQuery,它工作正常,因为它已在应用程序的许多其他部分中使用)而不是html。

我所拥有的:我认为,我有此链接:

<%= link_to 'Edit', edit_user_repreneur_path(@user_repreneur, :format => :js), :remote => true %>

首先,我不明白为什么我必须添加:format =>:js以使控制器使用JS视图,而不是HTML视图。这是控制器的代码:

def edit
    @user_repreneur = UserRepreneur.find_by_id_view(params[:id])
    respond_to do |format|
      format.js
      format.html
    end 
end

在控制器类的开始,我有这行:

  respond_to :js, :html

我的edit.js.erb文件包含带有警报的一行。但是,在呈现页面时,JS将呈现为文本,因此不会执行。我试图将format.js行更改为

format.js { render :layout => false }

但这并没有改变任何东西。我想我缺少了一些东西,但是我真的看不到…

在此先多谢,干杯!

PS:我不知道这是否有帮助,但是在我在链接帮助器中添加:format
=>:js之前,该视图始终呈现为HTML,并且如果我注释了format.html行,则有一个服务器端出现406不可接受的错误。


问题答案:

我认为问题不在于您的服务器端代码。对我来说一切都很好。它正在呈现的edit.js.erb事实证明您的服务器端代码运行良好。

问题出在您的客户端。当它收到Ajax响应时,就不会将其作为javascript执行。它以文本形式执行。

我本人最近遇到了这个问题,希望我可以随身携带我的代码,但我正在工作。但是,我亲自编写了jQuery Ajax请求,而不是依靠它,:remote => true因为该选项主要在表单中使用。

尝试提供您link_to的ID,然后将此jQuery放在您的application.js或任何位置。

$('#link_id').click(function(){
   $.ajax({
      type : 'GET',
      url : '/:controller/:action/',
      dataType : 'script'
   });
   return false;
});

这将捕获链接的click事件,向服务器发送请求,该请求应返回您的edit.js.erb文件,然后将其作为脚本执行。

提醒您,要考虑很多安全问题,以及真实性令牌等。但是,这应该使您的警报得以执行,并使您正确完成应用程序

阅读jQuery的Ajax,以获取更多选项以及有关POSTing数据的详细信息。

希望这可以帮助。

更新:其他可能的解决方案包括使用UJS作为Javascript驱动程序。您可以阅读https://github.com/rails/jquery-
ujs上
的文档,并使用UJS 观看主题Unobtrusive
Javascript
的Railscast 。



 类似资料:
  • 我正在将我的spring应用程序引导到spring boot,我遇到了一个问题,即嵌入式tomcat没有呈现jsp文件,而是将下载该文件。 到目前为止,我已经在谷歌上搜索并尝试了我所发现的一切,但我仍然做了任何错误的事情。 我的pom中有以下依赖项。xml文件 从应用程序中剪切。属性 从控制器中剪切 下载jsp文件而不是在浏览器中显示和呈现,这有什么错? 提前谢谢

  • 我有一个简单的组件: 这样称呼它: 但它没有说: JSX元素类型“Header”没有任何构造或调用签名 我该怎么解决这个问题?我需要把它渲染成

  • 问题内容: 我知道与此类似的问题:Pdf.js:使用base64文件源而不是url呈现pdf文件。Codetoffel很好地回答了这个问题,但是我的问题不同之处在于,通过对我的WebAPI实现的RESTful调用来检索我的PDF。让我解释… 首先,这是使用PDF.JS通过URL打开PDF的基本方法: 这很好用,但是我正在使用Angular及其服务通过我的RESTful Web API来请求PDF。

  • 问题内容: 我敢肯定这已经被问过了,但是我找不到答案。 我有一个从数据库中提取然后呈现到内容的AngularJS脚本。一切工作正常,除了我试图将一些单词用它们之间的新行连接起来的几个地方。 如果我使用上述代码的第一行,则看不到任何内容,但重新标记的html中没有新行。如果使用第二行,则将其渲染为文本,并且输出如下所示: 代替 如果有帮助,我可以发布完整的脚本,但是我想我只是看不到一些简单的东西。

  • 我想将html代码呈现给docx。而不是呈现html(即表格格式的表格),它只是将html代码作为纯文本写在里面。我使用的是docx4j-重要性XHTML罐。我使用了这里的代码,并修改了它以保存在文件中。 我做错了什么?

  • 出于某种原因,PHPStorm决定呈现任何名为root的文件。js作为纯文本,无需js着色和调试。有人知道如何纠正这个问题吗???它快把我逼疯了!!!