2013-02-20 14 views
16

मैं गतिशील डेटा प्राप्त करने के लिए d3.json का उपयोग कर रहा हूं।मैं d3.json पर पैरामीटर कैसे पोस्ट करूं?

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

    drawChart(json); 
}); 

मैं d3.json पर पैरामीटर कैसे पोस्ट करूं? यानी

डेटा: { साल: "2012", ग्राहक: "type1" }?

किसी भी विचार पोस्ट पर उन पैरामीटर पारित नहीं url पैरामीटर /myweb/totalQtyService.do?year=2012 & ग्राहक = type1

मैं ऐसे नीचे कोशिश की, लेकिन यह काम नहीं कर सके। क्योंकि डेटा संरचना बहुत अलग

d3.json => [वस्तु, वस्तु, वस्तु, वस्तु]

$ .ajax => {ENTITY_NAME: "ACTIVA" entity_tar_val: 350entity_val: 400level: 1_ आद्य _: ऑब्जेक्ट} ...

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

उत्तर

23

नोट: यह जवाब d3 के एक पुराने संस्करण पर लागू होता है .json, नीचे यहोशू टेलर की टिप्पणी देखें।


d3.json एक सुविधा विधि लपेटने d3.xhr है; जीईटी अनुरोध करने के लिए कड़ी मेहनत की गई है।

यदि आप पोस्ट करना चाहते हैं तो आप सीधे 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.parse(data) d3.xhr के लिए प्रलेखन here है।

+0

कॉलबैक के लिए पैरामीटर सूची कार्य (त्रुटि, डेटा) होना चाहिए। मैंने एक संपादन प्रस्तुत किया। – anderspitman

+0

इसके अलावा आप ऑब्जेक्ट को जेएसओएन – anderspitman

+0

धन्यवाद में भूलना भूल गए :)। निजी तौर पर, मुझे अपना मूल और समझने योग्य लगता है (कॉलबैक तर्क और स्ट्रिंगफिकेशन नहीं है)। मेरा उद्देश्य एक सामान्य मुद्दे के रूप में प्रतिक्रिया को संभालने के लिए एक सामान्य XHR अनुरोध का सबसे छोटा उदाहरण देना था - हालांकि मैंने जवाब में सबसे स्पष्ट तरीके का उल्लेख किया था। इसी तरह मैंने उदाहरण को दो चरणों में स्पष्ट रूप से विभाजित करना चुना - अनुरोध की सृजन और निष्पादन - प्रत्येक फंक्शन कॉल की ज़िम्मेदारी को स्पष्ट करने के लिए दोनों को एक अभिव्यक्ति में दो को चुनने के बजाय। अगर लोग उन्हें अधिक सहायक पाते हैं तो संपादन को स्वीकार करने में खुशी होगी। –

8

आप भी इस कोशिश कर सकते:

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

यह काम पर प्रतीत होता है लेकिन गलत है। D3.json (...) भाग तुरंत HTTP अनुरोध प्राप्त करता है - जो आप चाहते हैं उसे नहीं। प्रेषण तब * एक और * कॉल करता है, इस बार वह जिसे आप चाहते हैं। –

-1

आप struts का उपयोग करते हैं आप यूआरएल और पैरामीटर परिभाषित कर सकते हैं:

<s:url action="jsondatatreeaction" var="jsonsearchTag" 
    namespace="/data"> 
    <s:param name="searchType" value="%{searchType}"></s:param> 
</s:url> 
। । । d3.json ('$ {jsonsearchTag}', फ़ंक्शन (त्रुटि, भड़कना) { ... } ।
0

आप एक HTML रूप की तरह एक अनुरोध (क्वेरी पैरामीटर का प्रयोग करके) बनाना चाहते हैं, तो आप क्या करेंगे: d3-request docs

आप एक सरल परिवर्तित करना चाहते हैं:

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

गहरी वस्तुओं के लिए, क्वेरी स्ट्रिंग को बनाने के तरीके के लिए यह लिंक देखें: https://stackoverflow.com/questions/1714786/query-string-encoding-of-a-javascript-object – juacala

संबंधित मुद्दे