Как отправить параметр на d3.json?

Я использую d3.json для получения динамических данных.

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

    drawChart(json);
});

Как разместить параметр на d3.json? т.е.

данные: {  год: "2012",  клиент: "type1" }

Любая идея передает эти параметры в сообщении? не параметр url/myweb/totalQtyService.do?year=2012&customer=type1

Я попробовал такое ниже, но не смог заставить его работать. потому что структура данных настолько различна

d3.json = > [Объект, объект, объект, объект]

$. ajax = > {имя_общества: "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) {
  }
 });

Ответы

Ответ 1

ПРИМЕЧАНИЕ. Этот ответ относится к более ранней версии d3.json, см. комментарий Джошуа Тейлора ниже.


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 здесь.

Ответ 2

Вы также можете попробовать следующее:

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

Ответ 3

Если вы хотите сделать запрос как 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;
}

Ответ 4

Если вы используете 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) { ... } , , ,