在get
回复中我有content-disposition: attachment;filename=f.csv
,我需要在页面上下载此文件的内容。
在$.ajax
请求中,我出错了。
如何使用jQuery ajax
(或get
)获取文件内容?
的 UPD
error: function( jqXHR, textStatus, errorThrown ) {
console.log( jqXHR, textStatus, errorThrown );
}
获取
Object {
...
readyState 0
responseText ""
status 0
statusText "error"
}, error,
UPD 2
我找到了一个jquery.fileDownload插件,但它显示了浏览器的窗口,其中包含 save 或 open 对话框,如下所示:
但我需要文件内容
我没有必要在电脑上下载文件。
UPD 3
完整代码清单:
$.ajax( {
url: link,
crossDomain: true,
dataType: "text",
success: function( data, textStatus, jqXHR ) {
alert( data );
},
error: function( jqXHR, textStatus, errorThrown ) {
console.log( jqXHR, textStatus, errorThrown );
}
} );
文件由其他服务生成,我无法更改
UPD 4
首先,我尝试从其他域获取json
数据,如下所示:
$.ajax( {
url: link,
async: true,
cache: true,
dataType: "jsonp",
crossDomain: true,
type: "GET",
jsonp: "finance_charts_json_callback",
jsonpCallback: "finance_charts_json_callback",
error: function( jqXHR, textStatus, errorThrown ) {
console.log( jqXHR, textStatus, errorThrown );
},
success: function( data, textStatus, jqXHR ) {
console.log( data );
}
} );
link
看起来像http://chartapi.finance.yahoo.com/instrument/1.0/a/chartdata;type=quote;ys=2012;yz=2;ts=1234567890/json?finance_charts_json_callback=finance_charts_json_callback
它的回复标题:
HTTP/1.1 200 OK
Date: Wed, 30 Apr 2014 12:01:08 GMT
P3P: policyref="http://info.yahoo.com/w3c/p3p.xml", CP="CAO ... GOV"
Cache-Control: public
Expires: Thu, 01 May 2014 00:32:18 GMT
Last-Modified: Wed, 30 Apr 2014 00:32:18 GMT
Content-Type: text/javascript; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding,X-Ssl
Age: 0
Via: http/1.1 yts39.global.media.ir2.yahoo.com (...)
Server: ATS
Connection: keep-alive
一切正常。
当我尝试从其他服务器获取文件时,它的响应标头:
HTTP/1.1 200 OK
Cache-Control: no-cache
Date: Wed, 30 Apr 2014 12:09:01 GMT
Pragma: no-cache
Content-Type: text/csv
Expires: -1
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
content-disposition: attachment;filename=export.csv
Content-Encoding: gzip
Vary: Accept-Encoding
答案 0 :(得分:2)
无法获取文件内容,因为它位于不同的域中,content-disposition
数据与JSONP不兼容,并且服务器不通过{支持CORS(跨源资源共享) {1}}标题。
您的第一个请求有效,因为服务器正在使用JSONP进行响应。但是,您的Access-Control-Allow-Origin
请求正在接收原始数据(没有CORS就无法访问)。
JSONP通过将资源请求为content-disposition
来工作,服务器使用JavaScript函数调用进行响应,并将数据作为参数传递。因此,当您收到脚本时,浏览器会执行该脚本,您可以访问该函数中的数据。
<script>
请求的工作原理是让服务器输出文件的原始内容,并且没有JSONP中的JavaScript函数调用,所以尽管浏览器接收数据,但它不允许您访问它
唯一可能的解决方案是:
答案 1 :(得分:0)
修改,更新
尝试
$(function() {
$.getJSON("https://query.yahooapis.com/v1/public/yql?q=select"
+"* from csv where url='http://finviz.com/export.ashx?'"
+"&format=json&diagnostics=true&callback=?"
, function (data, textStatus, jqxhr) {
$.each(data.query.results.row, function (index, value) {
jqxhr.promise()
.done(function () {
$("<li>", {
"text": value.col2 + " " + value.col8
})
.css("padding", "8px")
.appendTo("ol");
})
.always(function () {
if (index === 4999) {
console.log(data.query
, data.query.diagnostics.warning
, data.query.results.row.length
, index
, $("li").length);
};
});
});
});
});
答案 2 :(得分:0)