質問

私はそのようなテストのためにジャスミンにデータセットをロードしようとしています... いつも 「IT」で示されたテストを取得して、Arrayを使用する前にJSONコールが終了するまで待機します。 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

 });
役に立ちましたか?

解決

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

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

    }
});

Asyncをfalseに設定すると、通話に長い時間がかかるとブラウザが凍結される可能性がありますが、他のJavaScriptまたはjQueryコードが通話が終了してデータがロードされるまで実行されないようにします(通話の想定成功です)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top