2010-07-13 17 views
9

Wie kann ich ein JSON-Dokument ohne jQuery konsumieren? Anstatt die Methode getJSON() aufzurufen, würde ich gerne meine eigene entwerfen. Wie mache ich das?Konsumieren von JSON-Daten ohne jQuery (ohne getJSON)

+2

Hallo Vivek. Könnten Sie Ihrer Frage weitere Einzelheiten hinzufügen? In welcher Sprache/in welchem ​​Rahmen arbeiten Sie? –

+9

+1 Scheint offensichtlich, dass OP wissen möchte, wie man eine AJAX-Anfrage für JSON-Daten macht, ohne jQuery zu benutzen. Nicht so schwer herauszufinden. – user113716

+0

@patrick: Nun, es ist verwirrend genug Leute, um eine Kommentardiskussion in nur neun Wörtern zu generieren, also würde ich sagen, es war offensichtlich, dass es eine schlechte Frage war, egal wie fähig jemand ist, es herauszufinden. – annakata

Antwort

3

Sie müssten Ihre eigene JSON/AJAX-Funktion rollen. Es gibt einige Beispiele here. Ich bin mir nicht sicher, wie gut sie sind.

15

Wenn es sich um dieselbe Domainanforderung handelt, verwenden Sie window.XMLHttpRequest. Wenn es remote ist, dann ein Skript Element injizieren, können Sie sehen, wie jQuery funktioniert es:

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

ein JSON Parser verwenden. Sie können auch eval verwenden, aber es ist verpönt für einen JSON-Parser.

Hier interne parseJSON Methode von jQuery:

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