20

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

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

    drawChart(json);
});

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

数据:{年份:“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) {
  }
 });
4

5 回答 5

24

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

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

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

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

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);
        }
    );

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

于 2013-06-26T12:39:01.507 回答
10

你也可以试试这个:

    d3.json(url,function(error, data) {
       ...
    })
   .header("Content-Type","application/json")
   .send("POST", JSON.stringify({year: "2012", customer: "type1"}));
于 2014-10-20T08:58:10.073 回答
4

在 D3v5 中使用 d3-fetch,看起来像

        d3.json(url, {
            method: 'POST',
            headers: {
                "Content-type": "application/json; charset=UTF-8"
            },
            body: JSON.stringify(query)
        });

urlURL在哪里,query是要发布的内容。

我在这个问题中找到了答案。

于 2018-09-27T14:06:49.177 回答
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 文档

如果要将简单对象转换为查询参数字符串,则可以使用以下函数:

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;
}
于 2017-05-24T16:43:10.527 回答
-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) { ... } ...
于 2015-07-28T21:10:36.993 回答