2009-12-04 5 views
7

Ho la seguente richiesta AJAX:

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

Per qualche ragione la richiamata errore viene chiamato evento se il codice di stato HTTP 200 ie. la richiesta è OK. Perchè è questo?

risposta

10

Il problema potrebbe essere che i dati JSON restituiti dall'url non sono corretti. Quando il server restituisce effettivamente qualcosa, il codice di stato http è 200. Ma ciò non significa che i dati siano corretti. Verificare che i dati json stringa restituiti siano correttamente formati.

Sto rispondendo alla mia stessa ospite perché ho imparato questo nel modo più difficile. Non ero sfuggito a un carattere "-quote nei miei dati json." Questo ha comportato un comportamento molto strano, ma fortunatamente il carattere di doppia citazione è praticamente l'unico personaggio che deve essere scappato dai dati inviati tramite JSON. Where can I find a list of escape characters required for my JSON ajax return type?)

1

La richiamata restituisce una pagina con Content-type: application/json? Altrimenti, quella potrebbe essere la ragione.

+0

Ho provato questo e sembra che non importi. Funziona (quando è ks) in entrambe le direzioni con e senza la dichiarazione del tipo di contenuto. – kosoant

+0

hmmm forse quella era la libreria prototipo non jquery quindi – Greg

0

devo fare un sacco di test con il file: gli URL invece di utilizzare un web server il mio codice JSON avrà sempre il tipo MIME sbagliato a prendere cura di questo uso il seguente codice:..

$(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); 
      } 
     }); 
    } 
); 

Questo imporrà che il tipo MIME sia corretto per i dati JSON

Problemi correlati