是否有可能从Javascript主机下载文件来获取非AJAX HTTP POST?

时间:2013-02-12 14:51:43

标签: json asp.net-web-api http-post

我们有一个显示报告的网页,其中包含一组动态过滤器。

用户选择一个命名报告,该页面从WebApi获取有效过滤器作为JSON列表。用户可以选择过滤器,然后在网格中显示结果(再次通过WebApi调用)。到目前为止一切都很好

现在我们允许将数据下载为文件(例如Excel)并遇到问题。

我们希望使用JSON过滤器数据发送HttpPost(但 AJAX 帖子),以便浏览器下载文件。我们不能使用JQuery $ .ajax或$ .post,因为数据是在回调中返回的,而不是浏览器处理下载。

我们尝试了一个标记和一个提交按钮,但是搜索StackOverflow建议这只支持将数据作为名称 - 值对而不是JSON主体发送。除非你知道不同吗?

似乎最简单的方法是使用带有单个隐藏输入字段的a,将JSON的内容编码在隐藏控件中,然后在服务器上手动反序列化它?

1 个答案:

答案 0 :(得分:1)

您可以添加一个html表单并循环遍历该对象,以将名称值对添加到表单中。

var query = {},
    $form = $("<form>")
    .attr("method", "post")
    .attr("action", 'pathtoservice');

$.each(query, function (name, value) {
    if (typeof (value) === "number" || typeof (value) === "string") {
        $("<input type='hidden'>")
            .attr("name", name)
            .attr("value", value)
            .appendTo($form);
    }
    else if (typeof (value) === "object") {
        $.each(value, function (i, item) {
            $("<input type='hidden'>")
                    .attr("name", name)
                    .attr("value", item)
                    .appendTo($form);
        });
    }
});

$form.appendTo("body");
$form.submit();