【问题标题】:Custom jQuery function randomly undefined自定义jQuery函数随机未定义
【发布时间】:2017-09-08 15:25:54
【问题描述】:

提前感谢您的帮助。

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

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

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

大多数情况下这工作得很好,但偶尔我会收到错误“TypeError: $(...).lineChart is not a function”。第一个 barChart 每次都会呈现,但有时无法再访问与 barChart 在同一文件中定义的 lineChart 函数。

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

我不知道为什么该功能有时不再可用以及什么似乎是随机的。

对于没有粘贴确切的代码,我深表歉意。有相当多的 cmets 和变量/函数名称我不能在这里发布。

谢谢。

$.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);
});

【问题讨论】:

  • 您确定美元符号没有被其他任何东西覆盖吗?当然,我总是使用对 jQuery 的显式引用来保证美元符号没有被其他库“声明”。如果您不确定,请尝试将$ 切换为jQuery,看看问题是否消失。我怀疑这是问题所在,但值得检查。
  • 将您的代码附在:$(document).ready(function(){ //YOUR CODE GOES HERE });
  • 感谢@CPR,但它仍然抛出同样的错误。
  • @ShaktiPhartiyal 这似乎解决了这个问题,谢谢。我不完全确定为什么。在包含图表函数的 js 文件已经加载(不是延迟或异步)之后,在页面底部调用渲染逻辑。该文件包含 bar 函数,该函数与未在回调中呈现的所有其他图表一起完美运行。它只是通过回调呈现的图表似乎随机地遇到了这个问题。感谢您的帮助。
  • 作为答案添加

标签: javascript jquery ajax


【解决方案1】:

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

【讨论】:

  • 谢谢沙克蒂。标记为答案。您可能知道为什么当在同一个文件中定义两个函数时,一个在 AJAX 成功时带有回调,为什么在该回调中定义在该文件中必须已经加载才能到达这里的函数可能不再被定义?我想不出可以在加载该文件之前运行该回调函数的场景。编辑*也许我只是在考虑所有这些过于线性,需要阅读更多关于回调函数的内容。
  • 可能存在这样一种情况:页面/文件的内容已部分加载,导致一个函数被加载,而在第二个函数加载之前,ajax 调用回调。要遇到这个问题,我们有 $(document).ready 方法。在此处阅读更多相关信息 stackoverflow.com/questions/6005789/…stackoverflow.com/questions/24930807/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多