Rails 4 - 强制浏览器执行javascript响应而不是显示文本
Rails 4 - force browser to execute javascript response instead of displaying text
我有一个 Rails 4 应用程序,我需要强制控制器向所有请求(html 或 js)发送 js 响应。 出于某种原因,当控制器收到 html 请求时(例如,当用户通过键入 url 发出请求时),浏览器将响应显示为文本,而不是执行代码。
控制器:
def action
render :template => 'sessions/home.js.erb', :content_type => "text/javascript"
end
会话/主页.js.erb:
$("#button").on("click", function(){
alert("got here");
});
浏览器不是绑定 #button,而是简单地将 home.js.erb 中的代码显示为文本。
我在控制器中尝试了以下选项,但结果是相同的 - 浏览器只显示文本而不是执行代码:
render js: "alert('got here')";
或
render :format => :js, :template => 'sessions/home.js.erb'
或
respond_to do |format|
format.html {render :template => 'sessions/home.js.erb', :content_type => 'text/javascript'}
end
或
respond_to do |format|
format.html {render :template => 'sessions/home.js.erb', :content_type => 'application/javascript'}
end
有人可以帮助我弄清楚我需要做什么才能让浏览器执行javascript吗?
Rails 可以为您提供代码,但由您来确保代码在客户端加载和执行,否则它实际上只是文本。
Jquery有一些方便的助手只是为了这个事情
$.ajax({
type: "GET",
url: "test.js",
dataType: "script"
});
这将加载并执行一个Javascript文件。 或者您可以使用
$.getScript( "ajax/test.js", function( data, textStatus, jqxhr ) {
console.log( data ); // Data returned
console.log( textStatus ); // Success
console.log( jqxhr.status ); // 200
console.log( "Load was performed." );
});
这两个示例都复制自 Jquery api 文档。http://api.jquery.com/jquery.ajax/和http://api.jquery.com/jquery.getscript/
覆盖响应内容类型。在此处阅读有关响应对象的更多信息:http://guides.rubyonrails.org/action_controller_overview.html#the-response-object
试试这个:
def action
response.content_type = Mime[:js]
render js: "alert('got here');"
end
或者对于所有操作:
before_filter :force_js
def force_js
response.content_type = Mime[:js]
end
或者使用respond_to:
def action
respond_to do |format|
format.any(:html, :js) { render js: "alert('got here');" }
end
end
相关文章:
- 无法获取SOAP请求的响应文本
- Ajax 响应文本
- Jquery函数来验证响应文本
- Ajax响应文本始终为1
- XMLHttpRequest 的响应文本在 Mozilla 中为 null(空白)
- AJAX 响应文本为空
- 返回了JS对象,但响应文本不起作用
- 遍历响应文本
- AJAX 响应文本不匹配
- 原型 AJAX 响应文本缺少 javascript
- XHR 响应文本为空字符串
- 如何获取响应文本
- 将 AJAX 响应文本加载到 DIV 中
- 以优雅的方式将响应文本解析为键值对
- 使用 ajax 显示 php 响应文本
- 在 coffeescript 中迭代 json 响应文本
- AJAX 调用响应文本为空
- 如何从响应文本获取 JSON 字符串到 JavaScript 中
- 从单独的文件返回 AJAX 响应文本
- AJAX:响应文本在本地返回我的整个PHP代码