我有一个在Heroku中运行的Rails应用程序,还有一个使用Jquery的html文件。
Rails应用程序返回JSON数据(使用RABL),我的移动应用程序将获取并显示这些数据。
这就是我要做的,我把响应的内容输入到一个listview中。很简单。如果我使用Chrome,控制台显示访问控制-允许-原产地不允许错误的Control。如果我在Firefox上尝试,控制台上没有错误,但是数据也没有显示,甚至警报触发器也没有显示。
function getBuses(){
$('#content').append("<ul id='bus_list' data-role='listview' data-inset='true'</ul>")
$('#content').trigger("create");
//Se llama a la API para retornar todos los buses
$.getJSON('http://someapp.herokuapp.com/buses.json', function(data)
{
$.each(data, function(key, value)
{
alert(key + ":" + value);
$('#bus_list').append('<li id="'+bus.id+'">'+bus.numero_de_linea+'<li/>');
});
});
$('#bus_list').listview("refresh");
}
这就是服务器响应的内容:
[{"id":7,"numero_de_linea":"604"}]
我已经读了一段时间关于访问控制-允许-起源的文章,但是我不知道我该做什么,我应该在服务器上做些什么吗?我正在我的浏览器上尝试这个html文件,但它也不能在我的手机上工作。我已经将$.support.cors
和$.mobile.allowCrossDomainPages = true;
设置为真,当mobileinit
运行时。
关于下一步该做什么的任何信息,将不胜感激。
编辑:如果您正在使用RABL,请记住在初始化器中将变量enable_json_callback设置为true。你必须使这件事从双方。
发布于 2013-09-22 10:57:01
服务器的响应非常好,但是是浏览器完成了这一检查。要允许您的JSON请求,您必须在发送响应时设置访问头,就像在after_filter
中一样。
# This is used to allow the cross origin POST requests made by confroom kiosk app.
def set_access_control_headers
headers['Access-Control-Allow-Origin'] = "*"
headers['Access-Control-Request-Method'] = %w{GET POST OPTIONS}.join(",")
end
在这里,*
允许所有域。应将此更改为与您的域匹配。例如:
headers['Access-Control-Allow-Origin'] = "http://localhost:3000"
发布于 2014-04-10 11:56:57
在Rails 4中,命令after_filter
已经更改为after_action
,因此控制器顶部的完成代码应该是:
after_action :set_access_control_headers
def set_access_control_headers
headers['Access-Control-Allow-Origin'] = "*"
headers['Access-Control-Request-Method'] = %w{GET POST OPTIONS}.join(",")
end
https://stackoverflow.com/questions/18944597
复制