【问题标题】:What causes the "jqGrid is not a function " error?是什么导致“jqGrid 不是函数”错误?
【发布时间】:2011-02-02 22:18:22
【问题描述】:

升级后出现问题:

  • jqGrid 从 3.5.3 到 3.8.2
  • jquery 从 1.3.2 到 1.4.4
  • jquery-ui 从 1.7.2 到 1.8.8

我的应用程序有 jqueryui 选项卡。第三个选项卡有一个 jqGrid 控件。 如果我在第三个选项卡上重新加载,那么网格可以正常工作。但是,如果在第一个选项卡上重新加载,然后单击第三个选项卡,则不会显示网格。

Firebug 向我显示“jqGrid 不是函数”错误。

在论坛中搜索表明问题是 grid.loader.js 中的 pathtojsfiles 不正确

我的前缀是 document.URL,如下所示:

function jqGridInclude()
{
  var pathtojsfiles = document.URL + "script/jqGrid/src/"; // need to be ajusted
  ...
}

如果您将 pathtojsfiles 设置为错误的值,您会在 Firebug 中看到“找不到文件”错误。一切正常。

http://forum.jquery.com/topic/jqgrid-is-not-a-function

这个线程有一个死胡同: @milenaa:“起初我认为这是一个路径问题,因为我以前已经遇到过,但它的工作原理是这样的:我有一个菜单,它调用一些返回一些数据的服务器端控制器,或者我为它们发送一些数据. 当我单击调用稍后调用 jqgrid 函数的控制器的链接时,它可以工作。但是,如果我首先调用另一个函数,jqgrid 不起作用。该页面包含两种情况所需的所有js。 就像其他函数不让 jqgrid 工作一样……但我不知道为什么……”

读到这里,我觉得我也有类似的问题。 我不得不承认我对 Javascript 的执行模型并不熟悉。 有关如何解决或调试此问题的任何想法?

【问题讨论】:

    标签: javascript jquery jquery-ui jqgrid


    【解决方案1】:

    我想您在 Internet Explorer 中遇到了上述问题。看the following old answer。问题是当前在grid.loader.js中使用的方法不能保证被包含的文件会按照被包含的顺序执行,而且都在jQuery(document).ready之前执行处理程序开始执行。它所有加载的文件都已经在网络浏览器缓存中(就像你用“重新加载”页面描述的那样)然后一切正常,如果不是你使用的代码 jqGrid 可以执行之前 jqGrid JavaScript是准备好了。

    我建议您完全不包含 grid.loader.js。取而代之的是,您可以按照您在grid.loader.js 中看到的相同顺序手动包含您可能需要的所有来自 grid.loader.js 的文件。您可以尝试使用我在my answer in trirand forum 中描述的解决方法的另一种方法。我知道解决方法的唯一限制是:您不能使用开头有 XML 标头的 XHTML 代码。

    【讨论】:

    • 我更改了我的代码,因为你建议我们不要包含 grid.loader.js 文件。现在我很好,没有错误。感谢@Oleg。
    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2018-08-17
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多