В основном я использую Ajax для вызова C # WebMethod, который возвращает байтовый массив, состоящий из файла Excel.Он работает в IE и Chrome, но не работает в Firefox.Консоль возвращает readystate
из 4, но в FireFox статус 0, тогда как в других браузерах она попадает в блок if, где readystate
равен 4, а статус равен 200. Ниже приведен код.Если кто-то знает, что я делаю неправильно, я был бы очень признателен за помощь, но я попытался сделать несколько шагов, чтобы исправить ситуацию, и ни один из них не работал.
Если я вставлю alert('got here')
послестрока, содержащая xhttp.send
, будет ли она работать в Firefox?
<script type="text/javascript">
$("#operation").click(function () {
var xhttp = new XMLHttpRequest();
xhttp.open("POST", "Default.aspx/GetText");
xhttp.addEventListener("progress", function (e) {
if (e.lengthComputable) {
//alert("TOTAL:" + e.total + " LOADED:" + e.loaded);
var percentComplete = Math.ceil((e.loaded / e.total) * 100);
progressBar.max = e.total;
progressBar.val(percentComplete);
//console.log(percentComplete);
}
}, false);
xhttp.responseType = 'blob';
xhttp.setRequestHeader("Content-Type", "application/json");
xhttp.onreadystatechange = function () {
var a;
//console.log(xhttp);
if (xhttp.readyState === 4 && xhttp.status === 200) {
var blob = xhttp.response;
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "ItemMatrix.xlsx";
document.body.appendChild(link);
link.click();
} else {
console.log(xhttp);
}
};
xhttp.send(JSON.stringify({ sender: 'Generate Excel', itemLIST: $('#MainContent_itemnumberlist').val(), includeIMAGES: $('#<%= IncludeImages.ClientID %>').is(':checked') }));
});
</script>