使用POST FORM / AJAX下载文件?

时间:2016-08-11 07:14:51

标签: javascript ajax csv post download

我需要在页面中为我的相应表格下载CSV文件。下载后我不需要做任何操作,只是他说导出和数据被下载到CSV文件中。 后端代码已准备就绪,但我该如何使用POST。

我已经提到了许多建议,并尝试使用window.open但POST似乎是一个问题。 最后尝试使用FORM创建,但现在问题是我得到了

"415 unsupported media type"

我的请求标题

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection  keep-alive
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0
Content-Length  112
Content-Type    application/x-www-form-urlencoded

现在我理解的是要解决这个问题,我的内容类型应该设置为JSON,而在FORM POST中这是不可能的?

1)我们有更好的方法来下载文件(对于使用HTML和JS的单页APP)吗?没有图书馆请,简单的Javascript方式,在我的项目中无法获得图书馆的批准。

2)我如何解决上述问题,如果不是我的其他选择?

代码:

    var form = document.createElement("form");
    form.id = formId;
    form.action = url;
    form.method = method || "POST";
    form.target = target || "_self";
    if (data) {
        for (var key in data) {
            var input = document.createElement("textarea");
            input.name = key;
            input.value = typeof data[key] === "object" ? JSON.stringify(data[key]) : data[key];
            form.appendChild(input);
        }
    }
    form.style.display = 'none';
    $('#' + containerId).append(form);
    if (!self.isEmptyObject(data)) {
        form.submit();
    }

2 个答案:

答案 0 :(得分:0)

从REST端点

需要修复

包含以下代码

@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_FORM_URLENCODED})

并将参数更改为

public javax.ws.rs.core.Response getExceptionDetailLogs(final @FormParam("param1") String param1,
    final @FormParam("param2") String param2) throws Exception {
    ....
}   

答案 1 :(得分:-1)

这里我做了一个例子,确保对所有人都有帮助:

<form name="myform" id="myform" method="post" enctype= "multipart/form-data">
    <input name="uploadData" id="uploadData" type="file"/>
</form>

$("#uploadData").change(function (e) {
    $('.loading').show();
        var file_data = $('#uploadData').prop('files')[0];
        var form_data = new FormData();
        var csvhtml = '';
        form_data.append('file', file_data);
        $.ajax({
            url: '{{path('bulk_request_update_upload')}}',
            dataType: 'text',
            cache: false,
            contentType: false,
            processData: false,
            data: form_data,
            type: 'post',
            success: function (data) {
        }
    });
});