Ruby on rails 拒绝从'执行脚本;URL';因为它的MIME类型(';application/json';)是不可执行的,并且启用了严格的MIME类型检查
我知道这个问题已经被问过很多次了,但以我的情况来说。Firefox正在运行,但chrome给了我以下错误:Ruby on rails 拒绝从'执行脚本;URL';因为它的MIME类型(';application/json';)是不可执行的,并且启用了严格的MIME类型检查,ruby-on-rails,cors,mime-types,Ruby On Rails,Cors,Mime Types,我知道这个问题已经被问过很多次了,但以我的情况来说。Firefox正在运行,但chrome给了我以下错误: 拒绝从执行脚本'http://localhost:3000/get_all_test_centers?callback=undefined&_=1409807050144'因为它的MIME类型('application/json')不可执行,并且启用了严格的MIME类型检查。 我有一个wordpress网站,从那里我向rails服务器发送一个REST调用(jsonp请求)。我对RAILS中
拒绝从执行脚本'http://localhost:3000/get_all_test_centers?callback=undefined&_=1409807050144'因为它的MIME类型('application/json')不可执行,并且启用了严格的MIME类型检查。
我有一个wordpress网站,从那里我向rails服务器发送一个REST调用(jsonp请求)。我对RAILS中的CORS做了以下更改
mime\u类型.rb
before_filter :set_access_control_headers
def set_access_control_headers
headers['Access-Control-Allow-Origin'] = Rails.application.secrets.website_url
headers['Access-Control-Request-Method'] = 'GET, OPTIONS, HEAD'
headers['Access-Control-Allow-Headers'] = 'x-requested-with,Content-Type, Authorization'
end
Mime::Type.register'application/json',:js
应用程序\u控制器.rb
before_filter :set_access_control_headers
def set_access_control_headers
headers['Access-Control-Allow-Origin'] = Rails.application.secrets.website_url
headers['Access-Control-Request-Method'] = 'GET, OPTIONS, HEAD'
headers['Access-Control-Allow-Headers'] = 'x-requested-with,Content-Type, Authorization'
end
Rails.application.secrets.website\u url
值为http://localhost/
控制器输出:
def get_all_test_centers
test_centers = TestCenter.all
respond_to do |format|
format.js do
render :json => test_centers, :callback => 'renderTestCenters'
end
end
end
我的wordpress JS:
var renderTestCenters = function(data) {
console.log(data);
};
$.ajax({
url: "http://localhost:3000/get_all_test_centers",
crossDomain: true,
type: "GET",
dataType: "JSONP",
jsonpCallback: renderTestCenters
});
它在firefox中运行良好,但在chrome中它会给我带来错误 所以我终于得到了答案 更改ajax请求调用
$.ajax({
type: "GET",
url: "http://localhost:3000/get_all_test_centers",
crossDomain: true,
xhrFields: {
withCredentials: true
},
success: function(data) {
console.log(data);
}
});
应用程序\u controller.rb
before_filter :cor
def cor
if request.headers["HTTP_ORIGIN"]
headers['Access-Control-Allow-Origin'] = Rails.application.secrets.website_url
headers['Access-Control-Expose-Headers'] = 'ETag'
headers['Access-Control-Allow-Methods'] = 'GET, POST, PATCH, PUT, DELETE, OPTIONS, HEAD'
headers['Access-Control-Allow-Headers'] = '*,x-requested-with,Content-Type,If-Modified-Since,If-None-Match,Auth-User-Token'
headers['Access-Control-Max-Age'] = '86400'
headers['Access-Control-Allow-Credentials'] = 'true'
end
end
最后在我的控制器中:
def get_all_test_centers
test_centers = TestCenter.all
respond_to do |format|
format.js do
render :json => test_centers
end
end
end
现在,上述更改在所有浏览器中都起作用 有时结果不是由脚本直接处理的,因此为这些情况提供了:callback选项
呈现json:test\u centers,:callback=>params[:callback]
这对我有用