自定义jQuery函数随机未定义

时间:2017-04-12 17:55:25

标签: javascript jquery ajax

提前感谢您的帮助。

我有一个页面可以呈现少量图表,但我似乎偶尔会遇到一个范围问题。

我有一系列jQuery函数,我根据传入的选项渲染特定类型的图表,每个函数都包含一个AJAX调用,根据在图表上调用图表函数时提交的选项请求正确的数据集容器。

某些图表与第二个图表配对,其选项由第一个图表AJAX调用响应的JSON响应确定。

,在AJAX成功之后,配对图表在第一个图表的回调中呈现:

大部分时间这种方法都很好但偶尔会出现错误“TypeError:$(...)。lineChart不是函数”。第一个barChart每次都会渲染,但偶尔会出现与barChart在同一文件中定义的lineChart函数。

我在代码中添加的任何延迟似乎都解决了这个问题。当我使用调试器时,问题不存在,我可以捕获错误并在超时后重新调用lineChart函数,这似乎也有效。

我不知道为什么这个功能有时候不再可用,而且似乎是随机的。

我为没有粘贴确切的代码而道歉。我不能在这里发布一些评论和变量/函数名称。

感谢。

$.fn.barChart = function (options, callback) {
    $.ajax(options["url"], {
        method: "POST",
        type: "json",
        data: options.data,
        success: function (response) {

            // ..render this chart ..

            var optionsForNewChart = {}; // ..generate new options to respond with base on response JSON
            callback(optionsForNewChart);
        }
    });
};

$.fn.lineChart = function (options) {
    $.ajax(options["url"], {
        method: "POST",
        type: "json",
        data: options.data,
        success: function (response) {
            // ..render this chart ..
        }
    });
}


$("#barChart1").barChart({
    url: "https://...",
    data: {
        //post data
    }
}, function (response) {
    $('#lineChart1').lineChart(response);
});

$("#barChart2").barChart({
    url: "https://...",
    data: {
        //post data
    }
}, function (response) {
    $('#lineChart2').lineChart(response);
});

$("#barChart3").barChart({
    url: "https://...",
    data: {
        //post data
    }
}, function (response) {
    $('#lineChart3').lineChart(response);
});

1 个答案:

答案 0 :(得分:1)

将您的代码包含在: $(document).ready(function(){ //YOUR CODE GOES HERE }); 这将解决未加载函数的问题。