我们有一个显示报告的网页,其中包含一组动态过滤器。
用户选择一个命名报告,该页面从WebApi获取有效过滤器作为JSON列表。用户可以选择过滤器,然后在网格中显示结果(再次通过WebApi调用)。到目前为止一切都很好
现在我们允许将数据下载为文件(例如Excel)并遇到问题。
我们希望使用JSON过滤器数据发送HttpPost(但不 AJAX 帖子),以便浏览器下载文件。我们不能使用JQuery $ .ajax或$ .post,因为数据是在回调中返回的,而不是浏览器处理下载。
我们尝试了一个标记和一个提交按钮,但是搜索StackOverflow建议这只支持将数据作为名称 - 值对而不是JSON主体发送。除非你知道不同吗?
似乎最简单的方法是使用带有单个隐藏输入字段的a,将JSON的内容编码在隐藏控件中,然后在服务器上手动反序列化它?
答案 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();