2010-01-21 9 views
5

मैं एक एएसपी.नेट एमवीसी सेवा से JSON डेटा पुनर्प्राप्त करने के लिए jQuery.ajax (...) का उपयोग कर रहा हूं। सर्वर एक अपवाद का सामना करना पड़ता है, मैं ग्राहक को वापस एक 400 गलत अनुरोध स्थिति भेजने के लिए और एक JsonResult के रूप में मेरे अपवाद भेजें:jQuery JSON deserialize कैसे करता है?

Response.StatusCode = 400; 
return Json(new { ex.Message, ex.StackTrace }); 

और यहाँ मेरी jQuery कोड है:

$.ajax(
{ 
    type: "POST", 
    url: deleteUrl, 
    dataType: "json", 
    data: 
    { 
     dataItems: dataItems, 
     toJSON: true 
    }, 
    success: function(msg) 
    { 
     alert(msg[i].dataItem); 
    }, 
    error: function(request, status, error) 
    { 
     alert(request.responseText); 
    } 
}); 

मेरे ASP.NET कोड मुझे मेरे जावास्क्रिप्ट कोड के त्रुटि खंड में भेजता है, और त्रुटि ब्लॉक केवल मुझे सर्वर से लौटाई गई वस्तुओं के साथ अनुरोध करने के बजाय request.responseText को पढ़ने की अनुमति देता है।

अब, अभी तक एक और जावास्क्रिप्ट में जोड़ने के बजाय json_parse जैसे कुछ शामिल हैं और बस मेरी अपवाद को deserialize, मैं बस जेएसओएन पार्सर का उपयोग करना चाहता हूं जो jQuery का उपयोग करता है, हालांकि मुझे आसानी से जानकारी नहीं मिल रही है ।

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

+0

मैं रिक Strahl के ब्लॉग पर एक पोस्ट (http://www.west-wind.com/weblog/posts/324917.aspx) है कि बताते हैं पाया: "ध्यान दें कि AJAXJSON फ़ंक्शन को JSON एन्कोडिंग की आवश्यकता है। JQuery में कोई मूल JSON एन्कोडिंग कार्यक्षमता नहीं है (जो एक बड़ा चूक लगता है, लेकिन शायद छोटे पदचिह्न को संरक्षित करने के लिए किया गया था)। हालांकि कई JSON कार्यान्वयन उपलब्ध हैं। ऊपर मैं जेएसओएन में पैरामीटर ऑब्जेक्ट मैप को क्रमबद्ध करने के लिए डगलस क्रॉकफ़ोर्ड से JSON2.js फ़ाइल का उपयोग कर रहा हूं। " मैंने सोचा कि मैंने इसे jQuery 1.4 में बदल दिया है ... –

+2

क्या बदल गया था, jQuery अब उपलब्ध होने पर 'eval' के बजाय 'JSON.parse' का उपयोग करेगा। जेएसओएन * सीरियलाइजेशन * के लिए ओओटीबी समर्थन प्रदान नहीं किया गया jQuery (और अभी भी प्रदान नहीं करता है)। –

+0

@ क्रिसेंट, जिसे एक उत्तर के रूप में दिया जाना चाहिए, टिप्पणी नहीं। – Cheeso

उत्तर

6

jQuery eval का उपयोग करने के लिए उपयोग किया जाता है, अगर मुझे गलत नहीं लगता है। 1.4 के बाद से, यह मूल JSON deserializer का लाभ लेता है (उदाहरण के लिए फ़ायरफ़ॉक्स में कोई है)

+0

किसी को पता है कि jQuery ने इसके लिए एक आसान तरीका उजागर किया है? –

+5

@Peder: हाँ, 'jQuery.httpData (अनुरोध," जेसन ") 'आपको अपना पार्स किए गए JSON/जावास्क्रिप्ट ऑब्जेक्ट को वापस देगा। –

+0

दरअसल, आपको "जेसन" निर्दिष्ट करने की आवश्यकता नहीं है; httpData उस पर डिफ़ॉल्ट होगा। – kgriffs

2

मुझे लगता है कि यदि आपके पास एक जेसन स्ट्रिंग है तो आप जावास्क्रिप्ट में सोचते हैं कि आप ऑब्जेक्ट प्राप्त करने के लिए eval का उपयोग कर सकते हैं, यानी:

var myObject = eval('(' + myJSONtext + ')'); 

http://www.json.org/js.html

+0

डेटा पार्स करने का सबसे सुरक्षित तरीका नहीं है। –

+0

वास्तव में, मैंने जो कहा मैंने वापस ले लिया। चूंकि इस मामले में मैं केवल "सुरक्षित" डेटा वापस ला रहा हूं, न कि उपयोगकर्ता द्वारा प्रदत्त डेटा, मैं eval का उपयोग कर अनुरोध डेटा सुरक्षित रूप से deserialize कर सकते हैं। –

+0

'$ .ajax' त्रुटि फ़ंक्शन में, आप तब उपयोग कर सकते हैं: 'फ़ंक्शन (xhr) {json = eval (' ('+ xhr.responseText +') '); ...}; – Natim

0

पर इस बारे में अधिक जानकारी हो सकता है कि यह तुम्हारी मदद कर सकता है। मैं इसका इस्तेमाल मेरी json में टिप्पणियों और रिक्त स्थान को हटाने के लिए:

json = eval(o.responseText 
    .replace(/\/\*(.*)\*\/g, ' ') 
    .replace(/([^\:])\/\/[^\n]*\n/g, '$1') 
    .replace(/^\s|\s+|\s$/g, '')) 
+0

टिप्पणियां कानूनी JSON वैसे भी नहीं हैं। वे आपकी प्रतिक्रिया में क्यों लौट रहे हैं? –

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