Javascript 自定义jQuery函数随机未定义

Javascript 自定义jQuery函数随机未定义,javascript,jquery,ajax,Javascript,Jquery,Ajax,提前感谢您的帮助 我有一个页面可以呈现一些图表,但我似乎偶尔会遇到一个范围问题 我有一系列jQuery函数,用于根据传入的选项呈现特定类型的图表,每个函数都包含一个AJAX调用,以根据调用图表容器上的图表函数时提交的选项请求适当的数据集 一些图表与第二个图表配对,第二个图表的选项由第一个图表AJAX调用响应的JSON响应决定。在触发AJAX success:之后,在第一个图表的回调中呈现成对的图表 大多数情况下,这工作得很好,但偶尔会出现错误“TypeError:$(…)。折线图不是函数”。第一

提前感谢您的帮助

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

我有一系列jQuery函数,用于根据传入的选项呈现特定类型的图表,每个函数都包含一个AJAX调用,以根据调用图表容器上的图表函数时提交的选项请求适当的数据集

一些图表与第二个图表配对,第二个图表的选项由第一个图表AJAX调用响应的JSON响应决定。在触发AJAX success:之后,在第一个图表的回调中呈现成对的图表

大多数情况下,这工作得很好,但偶尔会出现错误“TypeError:$(…)。折线图不是函数”。第一个条形图每次渲染一次,但偶尔无法访问与条形图在同一文件中定义的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);
});
将您的代码放入:

$(文档).ready(函数(){
//你的密码在这里
});

这将解决函数未加载的问题。

您是否绝对确定美元符号没有被其他任何内容覆盖?当然,我总是使用jQuery的显式引用来保证美元符号没有被其他库“声明”。如果您不确定,请尝试将
$
切换到
jQuery
,看看问题是否消失。我怀疑这是否是问题所在,但值得检查。将您的代码封装在:
$(document).ready(function(){//your code GOES HERE})谢谢@CPR,但它仍然抛出相同的错误。@ShaktiPhartiyal这似乎解决了问题,谢谢。但我不完全确定为什么。在包含图表函数的js文件已经加载(不是延迟或异步)之后,在页面底部调用呈现逻辑。同一个文件包含一个bar函数,该函数与回调中未呈现的所有其他图表一起完美工作。只是通过回调呈现的图表似乎随机出现了这个问题。谢谢你的帮助。作为回答补充。谢谢沙克蒂。标记为答案的。您可能知道为什么在同一个文件中定义了两个函数,其中一个函数在AJAX成功时具有回调,为什么在该回调中,该文件中定义的函数可能不再被定义,而这些函数必须已经加载才能达到此目的?我想不出在加载文件之前可以运行回调函数的场景。编辑*也许我只是过于线性地考虑了这一切,需要阅读更多关于回调函数的内容。可能有这样一种情况,页面/文件的内容部分加载了一个函数,在加载第二个函数之前,ajax调用回调函数。为了解决这个问题,我们采用了$(document).ready方法。在这里阅读更多关于它的信息