从getJSON()内部调用时Push()不工作

时间:2017-10-02 14:37:39

标签: javascript jquery ajax function getjson

我目前正在使用jQuery拖放formbuilder plugin。现在,我想从我的数据库中获取拖放元素,并将这些元素添加到我的拖放构建器中。

这是我的请求功能:

function getElements(){
    $.getJSON( getContextPath() + "/api/elements/get", function (data){
        $.each(data, function(key, val) {
            addElement();
        });
    });
}

现在,我想将它们添加到formbuilder实例中(我使用this示例并使用一些预定义的值):

function addElement(){
    if (!window.fbControls) window.fbControls = [];
    window.fbControls.push(function(controlClass) {
        console.log("HERE");
        class controlStarRating extends controlClass {

            static get definition() {
              return {
                icon: '',
                i18n: {
                  default: 'Star Rating'
                }
              };
            }

            configure() {
                this.js = '//cdnjs.cloudflare.com/ajax/libs/rateYo/2.2.0/jquery.rateyo.min.js';
                this.css = '//cdnjs.cloudflare.com/ajax/libs/rateYo/2.2.0/jquery.rateyo.min.css';
            }

            build() {
              return this.markup('span', null, {id: this.config.name});
            }

            onRender() {
              let value = this.config.value || 3.6;
              $('#'+this.config.name).rateYo({rating: value});
            }
        }

      // register control
      controlClass.register('starRating', controlStarRating);
      return controlStarRating;
    });
}

不幸的是,我的console.log("HERE")没有被调用,所以似乎它停在那里。奇怪的是,如果我使用它作为我的请求函数,则函数正确执行:

function getElements(){
    var allElementsData = ["test"];
    // $.getJSON( getContextPath() + "/api/template/get", function (data){
    // });
    $.each(allElementsData, function(key, val) {
        addElement();
    });
}

有什么问题?

1 个答案:

答案 0 :(得分:0)

在函数addElement中,您将另一个函数推入数组window.fbControls。但是第二个函数只放在未执行的数组中。例如,您可以使用以下语句执行它:window.fbControls[0]()。然后你会看到console.log("HERE")