1

私はそのようなテストのためにジャスミンにデータセットをロードしようとしています...しかし、それはjson呼び出しであるため、配列を使用する前にJSON呼び出しが終了するまで待機するために「it」で示されるテストを常に取得することはできません。ajaxStop 関数を使用してみましたが、役に立ちませんでした。何か案は ?

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

 });
4

1 に答える 1

3

$.getJSON を使用する代わりに、$.ajax() を使用してパラメーターで async を false に設定し、.parseJSON() を使用して JSON を解析できます。

$.ajax({
    URL: '/jasmine/obj.json',
    非同期: 偽、
    データ型: 'json',
    成功: 関数 (データ) {
        var jsonvar = $.parseJSON(データ);
        //ここにあなたのコード!

    }
});

async を false に設定すると、呼び出しに時間がかかる場合にブラウザーがフリーズしたように見える可能性があることを警告しますが、呼び出しが終了してデータが読み込まれるまで、他の JavaScript または jQuery コードの実行が妨げられます (呼び出しが成功です)。

于 2011-01-11T16:51:24.717 に答える