【问题标题】:Push() not working when called from inside getJSON()从 getJSON() 内部调用时,Push() 不起作用
【发布时间】:2017-10-02 22:46:19
【问题描述】:

我目前正在使用 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();
    });
}

有什么问题?

【问题讨论】:

  • 我认为问题出在 /api/elements/get 的返回值中。您可以添加 data 值吗?是数组,还是json对象?
  • 不,我什至还没有使用返回的数据值...我使用带有一些硬编码默认值的代码。
  • 对不起,但是在 $.getJSON** 里面你使用:**$.each(data, func。不是吗

标签: javascript jquery ajax function getjson


【解决方案1】:

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

【讨论】:

  • 那是什么意思?不幸的是,这也不起作用。另外,为什么它在第二个getElements() 函数中起作用,而在第一个函数中不起作用?
  • 好的。我看不到您添加到数组中的调用函数的位置。但由于它第二次工作,我能想到的唯一原因,它不能与 $.getJSON 一起工作,可能是 /api/elements/get 可能返回一个 [] (一个空数组)作为数据。然后该函数将被调用 0 次。您是否检查了网络数据(在您的浏览器的开发者工具中)以查找对 /api/elements/get 的调用?
猜你喜欢
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
相关资源
最近更新 更多