フロントエンド:Ajaxがエクスポートデータを呼び出してExcelメソッドを実行し、メソッドは実行されますがダウンロードされません

バックエンドはデータクエリを実行し、処理結果をExcelに返します。フロントエンドはajaxを使用します。

最初の文言は次のとおりです。ajaxURLにインターフェースパスを入力すると、結果コードは正常に実行できますが、ページにダウンロードボックスがポップアップすることはありません。

理由:ajaxの戻り値は文字ストリームのみであり、Excelのエクスポートはバックグラウンドでブラウザーに書き込まれるバイナリバイトストリームであるため、AjaxはExcelを直接エクスポートできません。

 

方法1:フォーム(推奨)

<a href="javascript:void(0)" onclick="exportExcel()">导出</a>
 
function exportExcel(){
     var form = $("<form>");
     form.attr('style', 'display:none');
     form.attr('target', '');
     form.attr('method', 'post');
     form.attr('action', '接口url');
 
     var input1 = $('<input>');
     input1.attr('type', 'hidden');
     input1.attr('name', '参数');
     input1.attr('value', '参数值');      /* JSON.stringify($.serializeObject($('#searchForm'))) */
 
     $('body').append(form);
     form.append(input1);
      
     form.submit();
     form.remove();   
}

メソッド2、window.location.href()

function() {
    window.location.href = "接口url?参数1=xxx&参数2=aaa";
}

方法3:ajaxリクエストはバックエンドのパラメーターをキャッシュしてフロントエンドに返し、フロントエンドajaxはwindow.open(url?params = params)を再度開始します。 

$.ajax({
url: '接口url',
type: 'post',
dataType: "json",
contentType : 'application/json',
data : JSON.stringify(this.tableOpts),
success: function(data){
    window.open('接口url?params=xxxx');
}
});

 

window.open()またはwindow.location.href()を使用する場合、フロントエンドの転送制限があることに注意してください。制限を超えると、エラーが報告されます。

Microsoft Internet Explorer (Browser):IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。

Firefox (Browser):对于Firefox浏览器URL的长度限制为65,536个字符

Safari (Browser):URL最大长度限制为 80,000个字符。

Opera (Browser):URL最大长度限制为190,000个字符。

Google (chrome):url最大长度限制为8182个字符

window.locationとwindow.open()の違いについては、後者はダウンロード時に新しいウィンドウを開きます。ファイルが正常にダウンロードされると、ウィンドウは閉じられます。通常、ダウンロードが十分に速い場合、ウィンドウは開きません。見えるように!ただし、前者のダウンロードでは新しいウィンドウは開きません。前者を使用することをお勧めします。 

 

おすすめ

転載: blog.csdn.net/weixin_38676276/article/details/107646212