2010-07-13 13 views
9

मैं jQuery के बिना JSON दस्तावेज़ का उपभोग कैसे कर सकता हूं? विधि getJSON() पर कॉल करने के बजाय, मैं अपना खुद का डिज़ाइन करना चाहता हूं। मैं उसको कैसे करू?jQuery के बिना JSON डेटा उपभोग (sans getJSON)

+2

हाय विवेक:

यहाँ jQuery के आंतरिक parseJSON विधि है। क्या आप अपने प्रश्न में कुछ और विवरण जोड़ सकते हैं? आप किस भाषा/ढांचे में काम कर रहे हैं? –

+9

+1 स्पष्ट लगता है कि ओपी जानना चाहता है कि jQuery का उपयोग किए बिना JSON डेटा के लिए AJAX अनुरोध कैसे करें। पता लगाना मुश्किल नहीं है। – user113716

+0

@patrick: ठीक है, यह केवल नौ शब्दों में टिप्पणी चर्चा उत्पन्न करने के लिए पर्याप्त लोगों को भ्रमित कर रहा है, इसलिए मैं कहूंगा कि यह स्पष्ट था कि यह एक खराब सवाल था, इस पर ध्यान दिए बिना कि कोई भी इसे समझने में कितना सक्षम है। – annakata

उत्तर

3

आपको अपना स्वयं का JSON/AJAX फ़ंक्शन रोल करना होगा। कुछ उदाहरण here हैं। मुझे यकीन नहीं है कि वे कितने अच्छे हैं।

15

यदि यह वही डोमेन अनुरोध है तो विंडो.XMLHttpRequest का उपयोग करें। यदि यह रिमोट है, तो एक स्क्रिप्ट तत्व इंजेक्षन, तो आप देख सकते हैं कि jQuery यह करता है:

// If we're requesting a remote document 
    // and trying to load JSON or Script with a GET 
    if (s.dataType === "script" && type === "GET" && remote) { 
     var head = document.getElementsByTagName("head")[0] || document.documentElement; 
     var script = document.createElement("script"); 
     script.src = s.url; 
     if (s.scriptCharset) { 
      script.charset = s.scriptCharset; 
     } 

     // Handle Script loading 
     if (!jsonp) { 
      var done = false; 

      // Attach handlers for all browsers 
      script.onload = script.onreadystatechange = function() { 
       if (!done && (!this.readyState || 
         this.readyState === "loaded" || this.readyState === "complete")) { 
        done = true; 
        success(); 
        complete(); 

        // Handle memory leak in IE 
        script.onload = script.onreadystatechange = null; 
        if (head && script.parentNode) { 
         head.removeChild(script); 
        } 
       } 
      }; 
     } 

     // Use insertBefore instead of appendChild to circumvent an IE6 bug. 
     // This arises when a base node is used (#2709 and #4378). 
     head.insertBefore(script, head.firstChild); 

     // We handle everything using the script element injection 
     return undefined; 
    } 

एक JSON Parser का प्रयोग करें। आप eval का भी उपयोग कर सकते हैं लेकिन यह JSON पार्सर के पक्ष में फंस गया है।

parseJSON: function(data) { 
    if (typeof data !== "string" || !data) { 
     return null; 
    } 

    // Make sure leading/trailing whitespace is removed (IE can't handle it) 
    data = jQuery.trim(data); 

    // Make sure the incoming data is actual JSON 
    // Logic borrowed from http://json.org/json2.js 
    if (/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") 
     .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") 
     .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) { 

     // Try to use the native JSON parser first 
     return window.JSON && window.JSON.parse ? 
      window.JSON.parse(data) : 
      (new Function("return " + data))(); 

    } else { 
     jQuery.error("Invalid JSON: " + data); 
    } 
}, 
संबंधित मुद्दे