2010-02-14 2 views
1

c'est actuellement ce que j'ai, si la demande expire il n'y a pas de message retourné.déterminer un statut de flux JSON, et la validité des données avec Jquery

$.getJSON(jsonUrl, function(data){ 
     /*here*/ 
     if (data.stat != "ok") { //checks if query was valid 
      $('#content').html('content not available'); 
      return; 
     } 
     else {...Do Code...} 
}); 

Ma question est, puis-je (et comment) demander Jquery de réessayer jusqu'à 2 fois plus si l'alimentation JSON est pas retourné, et si l'alimentation est retourné comment puis-je vérifier si les données JSON est lui-même pas défectueux et dans la syntaxe json correcte.

Enfin, tout après /*here*/ exécute juste après l'intégralité du flux est renvoyé?

Répondre

1

Selon le documentation, $.getJSON sera généralement traite silencieusement JSON malformé est retourné:

S'il y a une erreur de syntaxe dans le fichier JSON , la demande habituellement échouera en silence. Évitez fréquemment d'éditer à la main les données JSON pour cette raison.

En ce qui concerne la demande réessayant jusqu'à deux fois plus, ce qui suit devrait le faire:

function getJson() { 
    var json = (function() { 
     var json = null; 
     $.ajax({ 
      'type': 'GET', 
      'async': false, 
      'global': false, 
      'url': '/some/url', 
      'dataType': "json", 
      'success': function (data) { 
       json = data; 
      } 
     }); 
     return json; 
    })(); 
    return json; 
} 

var json = getJson(); 
if(json.stat != "ok") { 
    for(var i = 0; i < 2; i++) { 
     json = getJson(); 
     if(json.stat == "ok") { 
      break; 
     } 
    } 
} 

if(json.stat != "ok") { 
    $('#content').html('content not available'); 
} else { 
    // do stuff with json 
} 

Et oui, après tout /*here*/ est exécuté dès que le serveur renvoie quelque chose.

+0

merci beaucoup Karim79! Je regarde aussi ce http://plugins.jquery.com/project/JSONSchemaValidator qui semble valider le schéma json lui-même:) – Mohammad