Javascript 如何在d3.json上发布参数?
我使用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("/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对象,请参阅此链接以了解如何生成查询字符串: