【问题标题】:re-call variable attached function from another function从另一个函数重新调用变量附加函数
【发布时间】:2018-04-16 08:24:55
【问题描述】:

对不起,如果我的问题标题有些混乱,但我不知道如何用一句话问这个问题......

我有这个代码:

clientInformation = (function() {
//var priser = null;
$.ajax({
        'async': false,
        'global': false,
        'cache': false,
        'url': stepp+'json/dataFile.json?ver='+Math.random(),
        'dataType': "json",
    'success': function(data) {
            clientInformation = data;
        //console.log('client collected',data);
    }
    });
    return clientInformation;
})();

在页面加载时运行。 如果 dataFile.json 有变化,我想重新加载上面的脚本。

我希望如果我输入:

clientInformation()

函数会再次触发,但是... 我得到的只是:“clientInformation 不是函数”。

我试过了:

clientInformation
clientInformation.call()

我怎样才能重新调用上面的函数,而不必重写或创建一个单独的函数来重新做同样的工作?

【问题讨论】:

  • 在成功回调中,你用这个来破坏函数... clientInformation = data; 将该变量名称更改为其他名称,您的问题就会消失。
  • 对不起,没有。那根本没有帮助。我仍然收到“未捕获的 TypeError:clientInformation 不是函数”
  • 实际上,我确实错过了其他东西。您正在立即执行它。只需将其更改为var clientInformation = function() { ... },其周围或之后不带括号。它之后的那些导致它立即执行,所以clientInformation 成为结果。也摆脱了回报。您将其设置为一个函数,因此您不需要返回该函数。

标签: jquery function variables


【解决方案1】:

有几件小事会阻止您的代码工作。

首先,您立即执行函数,然后将返回值设置为变量clientInformation。这可以通过删除函数后的括号来解决(也不需要包裹它的括号)。

其次,您将 Ajax 调用的结果分配给 clientInformation,因此即使第一个问题得到解决,您也会用结果覆盖函数。下次您尝试调用它时,您将尝试执行结果 - 该函数不再存在。您可以更改变量名称,或在回调中传递结果。

另外,使用async: false 是个坏主意。这会锁定所有执行,直到调用返回。这可能并不明显,但对于某些用户来说,它可能很容易使网站无限期挂起。如前所述,最好删除它并使用回调。

这是一个使用回调的示例,我强烈建议不要使用同步 Ajax 调用和结果的全局变量...

function clientInformation(callback) {
    $.ajax({
        'global': false,
        'cache': false,
        'url': stepp + 'json/dataFile.json?ver=' + Math.random(),
        'dataType': 'json',
        'success': function(data) {
            callback(data);
        }
    });
}

然后,要调用函数并处理响应,您可以执行以下操作...

clientInformation(function(data) {
    console.log(data);  // do whatever you need with the response data here
});

回调可能有点矫枉过正,但要视情况而定。如果您总是在 Ajax 调用成功时执行相同的操作,那么您也可以将代码放入成功处理程序并删除回调参数。

【讨论】:

  • 不用担心 - 希望这会让你再次前进 :)
猜你喜欢
  • 2018-04-29
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2016-10-18
  • 2012-04-25
  • 1970-01-01
相关资源
最近更新 更多