2013-02-12 35 views
0

我们有一个显示报告的网页,带有一组动态过滤器。是否有可能使用JSON正文从JavaScript中获取非AJAX HTTP POST来下载文件?

用户选择一个指定的报告,该页面从WebApi获取有效的过滤器作为JSON列表。用户可以选择过滤器,然后在网格中显示结果(再次通过WebApi调用)。目前为止所有罚款

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

我们想送HttpPost(但不 AJAX )与JSON过滤数据,从而使浏览器下载文件。我们不能使用JQuery $ .ajax或$ .post,因为数据在回调中返回,而不是作为浏览器处理下载。

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

看来最简单的方法是使用一个带有单个隐藏的输入字段,使用JSON的在隐藏控制编码的内容,然后在服务器手动反序列化此?

回答

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(); 
+0

感谢您的代码和概念。它适用于简单的对象,但数组可能会出现问题,再加上我不确定嵌套对象是如何工作的。我认为我们必须咬紧牙关并将JSON序列化为字符串值 - 这似乎是最简单的选择。 – Quango 2013-02-13 11:09:40

相关问题