2013-02-12 58 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

相關問題