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

Javascript 如何在d3.json上发布参数?,javascript,d3.js,Javascript,D3.js,我使用d3.json来获取动态数据 d3.json("/myweb/totalQtyService.do", function(json) { drawChart(json); }); 如何在d3.json上发布参数? i、 e 数据:{ 年份:“2012年”, 客户:“类型1” } 有没有想法在post上传递这些参数?而不是url参数/myweb/totalQtyService.do?year=2012&customer=type1 我在下面尝试了这样的方法,但是没有成功。因为数据

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

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

    drawChart(json);
});
如何在d3.json上发布参数? i、 e

数据:{ 年份:“2012年”, 客户:“类型1” }

有没有想法在post上传递这些参数?而不是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) {
  }
 });

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

d3v5注意:原始答案越来越过时。使用和承诺,而不是XMLHttpRequest

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

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

是包装d3.xhr的一种方便方法;它通过硬连线发出GET请求

如果你想发布,你可以直接使用

大概是这样的:

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的文档是。

您也可以尝试以下方法:

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

如果使用struts,则可以定义url和参数:

<s:url action="jsondatatreeaction" var="jsonsearchTag"
    namespace="/data">
    <s:param name="searchType" value="%{searchType}"></s:param>
</s:url>

. . . d3.json('${jsonsearchTag}',函数(错误,flare){ ... } . .
.如果您希望发出类似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);
请参见此处的文档:

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

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

在D3v5中使用D3Fetch

        d3.json(url, {
            method: 'POST',
            headers: {
                "Content-type": "application/json; charset=UTF-8"
            },
            body: JSON.stringify(query)
        });
其中
url
是url,
query
是要发布的内容


我在中找到了答案。

回调的参数列表应该是函数(错误,数据)。我提交了一个编辑。另外,你忘了将对象字符串化为JSONTANKS:)。就个人而言,我觉得我原来的更容易理解(回调参数和字符串化无法承受)。我的目的是给出一个通用XHR请求的最小示例,将响应的处理作为一个单独的问题,尽管我在回答中提到了最明显的前进方向。同样,我选择将示例明确划分为两个步骤——创建和执行请求——而不是将这两个步骤链接到一个表达式中n以澄清每个函数调用的责任。但是,如果人们觉得编辑更有用,则很高兴接受编辑。“d3.json是包装d3.xhr的一种方便方法;它通过硬连线发出GET请求。”这不是真的(至少现在是这样;可能是在2013年年中)。d3.json的文档说”如果未指定回调,则返回的请求可以使用xhr.get或类似工具发出,并使用xhr.on进行处理。”这意味着您可以执行
d3.json(url.post)(数据,回调)
。是的,您是对的——在编写d3.json时,它用于返回对http请求而不是请求对象的响应。将更新应答以反映此更改。这似乎可行,但不正确。d3.json(…)part会立即发出HTTP get请求,而不是您想要的。然后send会发出另一个调用,这次是您想要的调用。有关deep对象,请参阅此链接以了解如何生成查询字符串: