如何使用HTTP POST通过Ajax下载文件(即正文中的一些信息)?

mas*_*san 2 java ajax servlets download

可以显示下载弹出对话框

window.location = "someUrl"
Run Code Online (Sandbox Code Playgroud)

或者只是简单地有一个发送HTTP GET方法的链接等等.我成功完成了这个.

但现在我想用HTTP POST做Ajax.POST主体有JSON之类的

{"val1":"key1", "val2":"key2"}
Run Code Online (Sandbox Code Playgroud)

然后在servlet端,它读取JSON并对DB执行查询以获取数据,然后根据查询数据生成Excel.

我不能让它工作的部分是客户端.

假设我的servlet resources/report/schedule生成Excel文件.

使用Ajax时,这不会弹出下载对话框:(任何人都可以帮我如何使用Ajax下载对话框?

  function post25() {
            var jsonInput = {};
            jsonInput['??????'] = "481";
            jsonInput['?????'] = "11";
            jsonInput['???'] = "2000/01/01";
            jsonInput = JSON.stringify(jsonInput);

            var ajaxRequest = new XMLHttpRequest();
            ajaxRequest.onreadystatechange = function() {
                if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
                    var res = ajaxRequest.responseText;
                    //location.href = "../resources/report/schedule";
                }
                else if(ajaxRequest.status == 409 || ajaxRequest.status == 500 || ajaxRequest.status == 204) {
                    alert(ajaxRequest.status);
                    document.getElementById("showMessage").innerHTML = ajaxRequest.responseText;
                }
            }
            ajaxRequest.open("POST", "../resources/report/schedule", true);
            ajaxRequest.setRequestHeader("Content-Type", "application/json");
            ajaxRequest.send(jsonInput); 
        }//end post25()
Run Code Online (Sandbox Code Playgroud)

Jig*_*shi 10

出于安全原因,不允许使用ajax下载文件.

  • *NO*使用ajax你无法触发下载文件 (2认同)