1

我正在尝试为我的测试加载 jasmine 中的数据集......但是,由于它是一个 json 调用,我似乎不能总是得到用“it”表示的测试,等到 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

 });
4

1 回答 1

3

您可以使用 $.ajax() 并在参数中将 async 设置为 false,而不是使用 $.getJSON,然后使用 .parseJSON() 解析 JSON:

$.ajax({
    url: '/jasmine/obj.json',
    异步:假,
    数据类型:'json',
    成功:函数(数据){
        var jsonvar = $.parseJSON(data);
        //你的代码在这里!

    }
});

我会警告你,如果调用需要很长时间,将 async 设置为 false 可能会导致浏览器显示冻结,但它会阻止任何其他 JavaScript 或 jQuery 代码执行,直到调用完成并加载数据(假设调用是成功的)。

于 2011-01-11T16:51:24.717 回答