Question

Je suis en train de charger un jeu de données dans le jasmin pour mes tests comme tels ... Cependant comme un appel JSON Je ne peux pas semble toujours obtenir le test désigné par « il » attendre jusqu'à ce que l'appel JSON a terminé avant d'utiliser son tableau. J'ai essayé d'utiliser la fonction ajaxStop en vain. Toutes les idées?

describe("simple checks", function() {

  var exampleArray = new Array();   

beforeEach(function(){

    $(document).ajaxStop(function() {
        $(this).unbind("ajaxStop");

        $.getJSON('/jasmine/obj.json', function(data) {

         $.each( json.jsonattr, function(i, widgetElement) {                     
            exampleArray.push(new widget(widgetElement));
            });
          });
       });

});


  it("use the exampleArray", function() {

    doSomething(exampleArray[0]); // frequently this is coming up as undefined

 });
Était-ce utile?

La solution

Au lieu d'utiliser .ajax .getJSON $, vous pouvez utiliser $ () et false ensemble async dans vos paramètres, puis analyser le JSON en utilisant .parseJSON ():

$.ajax({
    url: '/jasmine/obj.json',
    async: false,
    dataType: 'json',
    success: function(data) {
        var jsonvar = $.parseJSON(data);
        //your code here!

    }
});

Je vous préviens que la mise async false peut que le navigateur apparaît gelé si l'appel prend beaucoup de temps, mais il empêchera tout autre code JavaScript ou jQuery d'exécuter jusqu'à ce que l'appel est terminé et les données sont chargées ( en supposant que l'appel est un succès).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top