2013-02-20 50 views
16

我正在使用d3.json來獲取動態數據。如何在d3.json上發佈參數?

d3.json("/myweb/totalQtyService.do", function(json) { 

    drawChart(json); 
}); 

如何在d3.json上發佈參數? 即

數據:{ 年: 「2012」, 顧客:「TYPE1「 }?

任何想法傳遞後這些參數沒有URL參數/myweb/totalQtyService.do?year=2012 &客戶= TYPE1

我試圖下面這樣,但不能使它工作。因爲數據結構等不同

d3.json => [對象,對象,對象,對象]

$阿賈克斯=> {ENTITY_NAME: 「禾邦」 entity_tar_val:350entity_val:400level:1_ _:對象},...

$.ajax({ 
    type: "POST", 
    url: url, 

    // parameter here 
    data : {year: "2012", customer: "type1「}, 
    success: function(json){ 
     // console.log(json); 
     **drawChart(json);** 
    } , 
    error:function (request, err, ex) { 
    } 
}); 

回答

23

注:此答案適用於舊版本的D3 .json,請參閱下面的JoshuaTaylor的評論。


d3.json是一個方便的方法包裝d3.xhr;它很難做出GET請求。

如果你想開機自檢,你可以直接使用d3.xhr

事情是這樣的:

d3.xhr(url) 
    .header("Content-Type", "application/json") 
    .post(
     JSON.stringify({year: "2012", customer: "type1"}), 
     function(err, rawData){ 
      var data = JSON.parse(rawData); 
      console.log("got response", data); 
     } 
    ); 

因爲沒有回調在創造它不是立即發送請求對象的規定。收到JSON響應後,可以用標準JavaScript方式解析,即JSON.parse(data) d3.xhr的文檔是here

+0

回調的參數列表應該是函數(錯誤,數據)。我提交了一個編輯。 – anderspitman 2014-08-20 23:08:34

+0

此外,您忘了將對象串入JSON – anderspitman 2014-08-20 23:22:05

+0

謝謝:)。就我個人而言,我覺得我的原創更容易理解(回調論證和串化不能承受)。我的目標是給出一個通用XHR請求的最小示例,將響應的處理作爲一個單獨的問題 - 儘管我提到了答案中最明顯的前進方向。同樣,我選擇明確地將示例分成兩步 - 創建和執行請求 - 而不是將它們鏈接在單個表達式中,以便闡明每個函數調用的責任。很高興接受編輯,如果人們發現他們更有幫助。 – 2014-08-21 11:32:40

8

你也可以試試這個:

d3.json(url,function(error, data) { 
     ... 
    }) 
    .header("Content-Type","application/json") 
    .send("POST", JSON.stringify({year: "2012", customer: "type1"})); 
+0

這似乎工作,但不正確。 d3.json(...)部分立即發出HTTP請求 - 不是你想要的。然後發送*另一個*電話,這次是你想要的。 – 2016-11-21 11:39:46

-1

如果你使用Struts,你可以定義URL和參數:

<s:url action="jsondatatreeaction" var="jsonsearchTag" 
    namespace="/data"> 
    <s:param name="searchType" value="%{searchType}"></s:param> 
</s:url> 
。 。 。 d3.json('$ {jsonsearchTag}',function(error,flare){ ... } 。 。 。
0

如果你想(使用查詢參數)像一個HTML表單的請求,那麼你會怎麼做:

d3.request("/path/to/resource") 
.header("X-Requested-With", "XMLHttpRequest") 
.header("Content-Type", "application/x-www-form-urlencoded") 
.post("a=2&b=3", callback); 

在這裏看到的文檔:d3-request docs

如果你想轉換一個簡單的反對查詢參數字符串,則可以使用以下函數:

function obj2Params(params){ 
    var str = ""; 
    var amp = ""; 
    for(var p in params){ 
    if(params.hasOwnProperty(p)) { 
     str += amp + encodeURIComponent(p) + "=" + encodeURIComponent(params[p]); 
     amp = "&"; 
    } 
    } 
    return str; 
} 
+0

對於深層對象,請參閱以下鏈接瞭解如何構建查詢字符串:https://stackoverflow.com/questions/1714786/query-string-encoding-of-a-javascript-object – juacala 2017-05-24 16:45:32