是否可以从带有JSON主体的Javascript获取非AJAX HTTP帖子来下载文件?

是否可以从带有JSON主体的Javascript获取非AJAX HTTP帖子来下载文件?,json,asp.net-web-api,http-post,Json,Asp.net Web Api,Http Post,我们有一个显示报告的网页,带有一组动态过滤器 用户选择一个命名报告,页面将从WebApi获取有效的过滤器作为JSON列表。用户可以选择过滤器,然后在网格中显示结果(再次通过WebApi调用)。到目前为止一切正常 现在我们需要允许将数据作为文件(例如Excel)下载,但遇到了一个问题 我们希望发送一个带有JSON过滤器数据的HttpPost(但不是AJAX帖子),以便浏览器下载一个文件。我们不能使用JQuery$.ajax或$.post,因为数据是在回调中返回的,而不是作为浏览器处理的下载 我们尝

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

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

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

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

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


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

您可以添加一个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();
var query={},
$form=$(“”)
.attr(“方法”、“职位”)
.attr(“操作”,“路径服务”);
$.each(查询、函数(名称、值){
如果(类型(值)==“数字”| |类型(值)==“字符串”){
$("")
.attr(“名称”,名称)
.attr(“值”,值)
.附录($表格);
}
else if(typeof(value)=“object”){
$。每个(值、功能(i、项){
$("")
.attr(“名称”,名称)
.attr(“值”,项目)
.附录($表格);
});
}
});
$form.appendTo(“正文”);
$form.submit();

感谢您提供的代码和概念。它适用于简单对象,但数组可能会出现问题,而且我不确定嵌套对象如何工作。我认为我们必须咬紧牙关,将JSON序列化为字符串值——这似乎是最简单的选择。