仅在调试javascript时才起作用

时间:2014-11-05 23:23:14

标签: javascript json business-rules

我在javascript文件中的代码:

$.getJSON('assets/jsons/fields.json', function(fieldsData){
          fieldsdata = fieldsData;
    });
    $.getJSON('assets/jsons/rulesjs.json', function(rulesData){
          rules = rulesData;
    });

    conditions.conditionsBuilder({
      fields: fieldsdata,
      data: rules

    });

在字段中使用断点:fieldsdata,它工作正常。 它从相应的.json文件中获取数据并显示数据 否则它没有显示任何东西。 我尝试过的事情: 我尝试在index.html中重新排列javascript文件声明。没有成功 我尝试使用全局变量。 3.我尝试将GETJSON放在一个不同的函数中并在赋值之前调用它。

我知道我错过了一些简单但却无法理解的东西。 Plz的帮助。感谢

1 个答案:

答案 0 :(得分:0)

$.getJSON()是异步的。这意味着$.getJSON()函数完成执行,然后有时候LATER,调用回调。在运行以下代码之前,它不会等待请求完成。如果你想使用你的两个ajax结果,你必须知道两个ajax函数何时完成。有多种方法可以做到这一点。

一种方法是对两个操作进行排序,并仅在最终回调中使用结果:

$.getJSON('assets/jsons/fields.json', function(fieldsData){
    $.getJSON('assets/jsons/rulesjs.json', function(rulesData){
         conditions.conditionsBuilder({
             fields: fieldsData,
             data: rulesData
         });
    });
});

另一种方法是并行启动这两个请求,并使用jQuery promise来知道两者何时完成。

$.when($.getJSON('assets/jsons/fields.json', $.getJSON('assets/jsons/rulesjs.json'))
     .then(function(fields, rules) {
         conditions.conditionsBuilder({fields: fields[0], data: rules[0]});
     });

并行启动请求可能会在更短的时间内完成。