0

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

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

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

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

我们尝试了一个标签和一个提交按钮,但搜索 StackOverflow 表明这仅支持以名称-值对的形式发送数据,而不是 JSON 正文。除非你知道不同?

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

4

1 回答 1

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();
于 2013-02-12T15:08:59.053 回答