如何在d3.json上发布参数?

yun*_*yun 19 javascript d3.js

我正在使用d3.json来获取动态数据.

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

    drawChart(json);
});
Run Code Online (Sandbox Code Playgroud)

如何在d3.json上发布参数?即

数据:{年:"2012",客户:"type1"}

有什么想法在帖子上传递那些参数?不是url参数/myweb/totalQtyService.do?year=2012&customer=type1

我在下面尝试过,但无法使其正常工作.因为数据结构如此不同

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

$ .ajax => {entity_name:"ACTIVA"entity_tar_val:350entity_val:400level:1_ proto _:Object},...

$.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) {
  }
 });
Run Code Online (Sandbox Code Playgroud)

Tom*_*m P 24

注意:此答案适用于较旧版本的d3.json,请参阅下面的JoshuaTaylor的评论.

d3v5的注意事项:原始答案越来越过时了.d3 v5使用fetch API和promises而不是XMLHttpRequest.

您可以在任何d3-fetch数据获取函数的第二个参数中设置http请求的方法,例如

d3.csv("/path/to/file.csv", { method: 'POST' })
    .then((data)=>{ /* do something with 'data' */ });
Run Code Online (Sandbox Code Playgroud)

d3.json是一个包装d3.xhr的便捷方法; 它是硬连线发出GET请求的.

如果你想POST,你可以直接使用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);
        }
    );
Run Code Online (Sandbox Code Playgroud)

由于在创建请求对象时未指定回调,因此不会立即发送回调.一旦收到JSON响应,就可以用标准的JavaScript方式解析,即JSON.parse(data) d3.xhr的文档就在这里.

  • "d3.json是一个包含d3.xhr的便捷方法;它是硬连线的,可以发出GET请求." 事实并非如此(至少现在;也许是在2013年中期).d3.json的文档说"如果没有指定回调,则可以使用xhr.get或类似函数发出返回的请求,并使用xhr.on处理." 这意味着你可以做`d3.json(url).post(data,callback)`. (8认同)

FDa*_*mas 8

你也可以试试这个:

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