2010-03-26 17 views
9

बिल्डिंग मैं जावास्क्रिप्ट में JSON ऑब्जेक्ट को बनाने का तरीका समझने की कोशिश कर रहा हूं। यह जेएसओएन ऑब्जेक्ट एक JQuery AJAX कॉल को पास कर दिया जाएगा। वर्तमान में, मैं अपने JSON हार्ड-कोड रहा हूँ और जैसा कि यहाँ दिखाया मेरी JQuery कॉल कर:जावास्क्रिप्ट - जेएसओएन ऑब्जेक्ट

$.ajax({ 
    url: "/services/myService.svc/PostComment", 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    data: '{"comments":"test","priority":"1"}', 
    dataType: "json", 
    success: function (res) { 
    alert("Thank you!"); 
    }, 
    error: function (req, msg, obj) { 
    alert("There was an error"); 
    } 
});   

यह दृष्टिकोण काम करता है। लेकिन, मुझे गतिशील रूप से अपना JSON बनाने और JQuery कॉल पर पास करने की आवश्यकता है। हालांकि, मैं यह नहीं समझ सकता कि JSON ऑब्जेक्ट को गतिशील रूप से कैसे बनाया जाए। वर्तमान में, मैं बिना किसी किस्मत के निम्नलिखित प्रयास कर रहा हूं:

var comments = $("#commentText").val(); 
var priority = $("#priority").val(); 
var json = { "comments":comments,"priority":priority }; 

$.ajax({ 
    url: "/services/myService.svc/PostComment", 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    data: json, 
    dataType: "json", 
    success: function (res) { 
    alert("Thank you!"); 
    }, 
    error: function (req, msg, obj) { 
    alert("There was an error"); 
    } 
}); 

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं? मैंने देखा कि दूसरे संस्करण के साथ, मेरी सेवा भी पहुंच नहीं रही है।

धन्यवाद

+1

आप किसी भी जावास्क्रिप्ट त्रुटियों मिलता है? – SLaks

+0

उत्कृष्ट बिंदु - फ़ायरबग डीबगर के साथ इसे चलाने का प्रयास करें और देखें कि आपको क्या मिलता है। –

+0

मुझे कोई जावास्क्रिप्ट त्रुटियां नहीं मिल रही हैं। मेरे $ .ajax कॉल में त्रुटि इवेंट हैंडलर हालांकि ट्रिगर हो रहा है। – user208662

उत्तर

8

आप JSON JavaScript library को देखने के लिए चाहते हो सकता है। इसमें stringify() फ़ंक्शन है जो मुझे लगता है कि आपको वही करना होगा जो आपको चाहिए।

+0

मैंने शुरुआत में यही सोचा था, लेकिन कोड से वह अपने उदाहरण में उपयोग कर रहा है, jQuery को आपके लिए इसका ख्याल रखना चाहिए। –

+0

@ जस्टिन एथियर: नहीं, jQuery में कोई JSON क्रमबद्धता नहीं है (केवल deserialization)। jQuery डेटा ऑब्जेक्ट के साथ पूरी तरह से कुछ अलग करता है @ user208662 इसे पास कर रहा है। –

+0

@ क्रिसेंट ताजा: दस्तावेज़ (http://api.jquery.com/jQuery.ajax/) में 'डेटा करने का एक उदाहरण है: ({id: this.getAttribute (' id ')}) ' – Mark

2

यह काम करना चाहिए

var json = { comments: "comments",priority: "priority" }; 
+2

जहां तक ​​मैं इसे समझता हूं, जेएसओएन में सभी तारों को डबल उद्धृत करने की आवश्यकता होती है, इसलिए "टिप्पणियां" और "प्राथमिकता"। यह एक जावास्क्रिप्ट ऑब्जेक्ट है, इसलिए यदि आप केवल जावास्क्रिप्ट ऑब्जेक्ट दिखाने की कोशिश कर रहे थे, तो यह मान्य है। जेएसओएन प्रारूप के लिए, तारों को डबल कोट्स की आवश्यकता है। – justkt

+0

हाँ आपका अधिकार, सिर्फ संपत्ति से उन्हें हटाने के लिए –

3

उद्धरण

data: '{"comments":"test","priority":"1"}', 

निकालें हो जाता है

data: {"comments":"test","priority":"1"}, 

JSONs वस्तुओं नहीं तार कर रहे हैं।

2

यह मेरे लिए काम करता है।

var json = "{ 'comments': '" + *comments* +"','priority:' '" + *priority* +"' }"; 

इटालिक्स चर हैं।

+0

क्या होता है यदि टिप्पणियां और प्राथमिकता चर में डबल कोट्स भी शामिल होते हैं? यह विफल रहता है। आदर्श समाधान नहीं है। – Dilshan

6

आपका कोड:

var comments = $("#commentText").val(); 
var priority = $("#priority").val(); 
var json = { "comments":comments,"priority":priority }; 

उद्धरण बाहर ले (पंक्ति 3):

var comments = $("#commentText").val(); 
var priority = $("#priority").val(); 
var json = { comments: comments, priority: priority }; 
संबंधित मुद्दे