在我的项目中,我必须集成库并解析以csv格式呈现的文件。要访问库并从该文件获取信息,我使用$ ajax,如下所示:
<script>
$(document).ready(function(){
$.ajax({
type: "GET",
url: "http://stats.xxx.tv/osexternal/reports/xxxxx/xxx_2014_YTD/2014-03-12.csv",
contentType: 'application/json',
dataType: 'json',
username: 'xxxx@xxxx.com',
password: 'dT$xxxx%949',
success: function (){
console.log('success');
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
});
<script>
任何人都可以让我知道这种方法有什么问题,因为我遇到跨域问题。请通过使用宝石让我知道任何替代方案。 感谢您的帮助!
答案 0 :(得分:1)
您遇到的似乎是某种CORs问题。有关CORs问题的注意事项:
现在,关于如何解决它,您可以尝试添加:
with_credentials: true
对Ajax的论点,但我感觉它会变得更奇怪......因为你必须包含一个用户名和密码它最好不要在客户端暴露那些任何人......
所以,我要做的是在服务器上进行调用(例如,对于rails控制器操作,但该方法可以在Sinatra应用程序中使用),然后将CSV返回到浏览器:
require 'net/http'
class MyController < ActionController::Base
# ...
def get_csv
uri = URI('http://stats.adap.tv/osexternal/reports/xxxxx/xxx_2014_YTD/2014-03-12.csv')
csv_request = Net::HTTP::Get.new(uri)
csv_request.basic_auth("username", "password")
csv_data = csv_request.request.body
csv
end
end
我假设你使用Ruby是因为你的宝石&#34;参考。这是 Net :: HTTP 的 doc
http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
和稍微容易理解的版本:
http://www.rubyinside.com/nethttp-cheat-sheet-2940.html
一般来说,让服务器向外部主机发出请求总是更容易(也更安全)(这是一个广泛的概括,并且绝对有这样的情况,这不是你想要的)。如果您需要提出跨域请求,我建议从以下开始:
http://www.html5rocks.com/en/tutorials/cors/
它可能会给你一些很好的提示,以找出它目前无法正常工作的原因。
最佳,