2013-02-20 83 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