2009-12-04 8 views
7

Ich habe folgendes Ajax-Anforderung:

 jQuery.ajax({ 
      async: true, 
      type: "GET", 
      url: url, 
      data: data, 
      dataType: "json", 
      success: function(results){ 
       currentData = results; 
      }, 
      error: function(xhr, ajaxOptions, thrownError){ 
       if (xhr.status == 200) { 
        console.debug("Error code 200"); 
       } 
       else { 
        currentData = {}; 
        displayAjaxError(xhr.status); 
       } 
      } 
     }); 

Aus irgendeinem Grund der Fehler Callback-Ereignis aufgerufen wird, wenn der HTTP-Statuscode 200, dh ist. Die Anfrage ist in Ordnung. Warum ist das?

Antwort

10

Das Problem besteht möglicherweise darin, dass die von der URL zurückgegebenen JSON-Daten fehlerhaft sind. Wenn der Server tatsächlich etwas zurückgibt, ist der http-Statuscode 200. Aber das bedeutet nicht, dass die Daten richtig sind json. Überprüfen Sie, ob die zurückgegebenen json-Daten korrekt formatiert sind.

Ich beantworte meinen eigenen Gast, weil ich das auf die harte Tour gelernt habe. Ich hatte kein "-Quote-Zeichen in meinen JSON-Daten gefunden. Dies führte zu sehr merkwürdigem Verhalten. Glücklicherweise ist das doppelte Anführungszeichen so ziemlich das einzige Zeichen, das aus den über JSON gelieferten Daten entkernt werden muss." Where can I find a list of escape characters required for my JSON ajax return type?)

1

Gibt Ihr Callback eine Seite mit Content-type: application/json zurück? Wenn nicht, könnte das der Grund sein.

+0

Ich habe das getestet und es scheint, dass es nichts ausmacht. Es funktioniert (wenn es funktioniert ks) mit und ohne Content-Type-Deklaration. – kosoant

+0

hmmm vielleicht war das die prototype library nicht jquery dann – Greg

0

ich eine Menge Tests mit file: Urls stattdessen einen Web-Server verwenden Mein Code JSON wird immer die falsche MIME-Typ haben, um sich darum kümmern ich den folgenden Code verwenden:..

$(document).ready(
    function(){ 

     myData = {}; 
     $.ajax({ 
      type: "GET", 
      // url: "json.php?fn=jsonData.json",  // with Apache 
      url: "jsonData.json",      // As a file:/// URL 
      contentType: "application/json; charset=utf-8", 
      data: myData, 
      beforeSend: function(x) { 
       if(x && x.overrideMimeType) { 
        x.overrideMimeType("application/json; charset=UTF-8"); 
       } 
      }, 
      dataType: "json", 

      success: function(returnData){ 
       $("#jsonData").html("Success:"+returnData.tag); 
      }, 
      error: function(returnData) { 
       $("#jsonData").html("Error:"+returnData.tag); 
      } 
     }); 
    } 
); 

Dadurch wird der MIME-Typ für JSON-Daten korrekt sein.

Verwandte Themen