2013-02-20 31 views
16

Tôi đang sử dụng d3.json để nhận dữ liệu động.Làm cách nào để đăng thông số trên d3.json?

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

    drawChart(json); 
}); 

Làm cách nào để đăng thông số trên d3.json? tức

dữ liệu: { năm: "2012", khách hàng: "type1“ }?

Bất kỳ ý tưởng vượt qua những thông số về bài đăng không url tham số /myweb/totalQtyService.do?year=2012 & khách hàng = type1

tôi đã cố gắng như dưới đây, nhưng không thể làm cho nó hoạt động được. vì cấu trúc dữ liệu khác nhau để

d3.json => [Object, Object, Object, Object]

$ .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) { 
    } 
}); 

Trả lời

23

Chú ý: Câu trả lời này áp dụng cho phiên bản cũ của d3 .json, xem bình luận của JoshuaTaylor bên dưới.


d3.json là phương pháp tiện lợi bao bì d3.xhr; thật khó để thực hiện các yêu cầu GET.

Nếu bạn muốn POST, bạn có thể sử dụng trực tiếp d3.xhr.

Something như thế này:

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

Bởi vì không gọi lại được quy định trong việc tạo ra các đối tượng yêu cầu nó không được gửi ngay lập tức. Sau khi nhận được phản hồi JSON có thể được phân tích cú pháp theo cách JavaScript chuẩn, tức là JSON.parse(data) Tài liệu cho d3.xhr là here.

+0

Danh sách tham số cho hàm gọi lại phải là hàm (lỗi, dữ liệu). Tôi đã gửi bản chỉnh sửa. – anderspitman

+0

Ngoài ra, bạn quên xâu chuỗi đối tượng thành JSON – anderspitman

+0

Cảm ơn :). Cá nhân, tôi tìm thấy bản gốc của tôi dễ hiểu hơn (đối số gọi lại và stringification không chịu đựng). Mục đích của tôi là đưa ra ví dụ nhỏ nhất về một yêu cầu XHR chung để lại việc xử lý phản hồi như một vấn đề riêng biệt - mặc dù tôi đã đề cập đến cách rõ ràng nhất trong câu trả lời. Tương tự như vậy, tôi đã chọn chia tách một cách rõ ràng ví dụ thành hai bước - tạo và thực hiện yêu cầu - thay vì chuỗi hai thành một biểu thức duy nhất để làm rõ trách nhiệm của mỗi lệnh gọi hàm. Vui lòng chấp nhận chỉnh sửa nếu mọi người thấy chúng hữu ích hơn. –

8

Bạn cũng có thể thử điều này:

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

Điều này dường như hoạt động nhưng không chính xác. Phần d3.json (...) ngay lập tức làm cho một yêu cầu HTTP nhận được - không phải là những gì bạn muốn. Sau đó, gửi sẽ thực hiện cuộc gọi * khác *, lần này là cuộc gọi bạn muốn. –

-1

Nếu bạn sử dụng struts bạn có thể xác định địa chỉ và các thông số:

<s:url action="jsondatatreeaction" var="jsonsearchTag" 
    namespace="/data"> 
    <s:param name="searchType" value="%{searchType}"></s:param> 
</s:url> 
. . . d3.json ('$ {jsonsearchTag}', chức năng (lỗi, bùng phát) { ... } . . .
0

Nếu bạn muốn thực hiện một yêu cầu như một hình thức HTML (sử dụng tham số truy vấn), sau đó bạn sẽ làm gì:

d3.request("/path/to/resource") 
.header("X-Requested-With", "XMLHttpRequest") 
.header("Content-Type", "application/x-www-form-urlencoded") 
.post("a=2&b=3", callback); 

Xem các tài liệu ở đây: d3-request docs

Nếu bạn muốn chuyển đổi một cách đơn giản đối tượng với chuỗi tham số truy vấn, khi đó bạn có thể sử dụng chức năng sau:

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

Đối với các đối tượng sâu, hãy xem liên kết này để biết cách tạo chuỗi truy vấn: https://stackoverflow.com/questions/1714786/query-string-encoding-of-a-javascript-object – juacala

Các vấn đề liên quan