从另一个函数重新调用变量附加函数

时间:2018-04-16 08:24:55

标签: jquery function variables

很抱歉,如果我的问题标题有些令人困惑,但我不知道如何用一句话来提问这个问题......

我有这段代码:

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()

如何重新调用上述功能而无需重写或创建单独的功能来重复执行相同的工作?

1 个答案:

答案 0 :(得分:0)

有一些小问题会阻止你的代码工作。

首先,您要立即执行该函数,然后将返回值设置为变量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调用成功时执行相同的操作,那么您也可以将代码放入成功处理程序并删除回调参数。