是什么导致“jqGrid不是函数”错误?

时间:2011-02-02 22:18:22

标签: javascript jquery jquery-ui jqgrid

升级后我遇到了问题:

  • 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的执行模型。 关于如何解决或调试此问题的任何想法?

1 个答案:

答案 0 :(得分:3)

我想您在Internet Explorer中遇到了所描述的问题。看看the following old answer。问题是grid.loader.js中当前使用的方法无法保证所包含的文件将以完全相同的顺序执行,而且所有文件都在{{1}之前执行处理程序开始执行。所有加载的文件都已经在Web浏览器缓存中(就像你用“重新加载”页面所描述的那样)然后所有工作都正确,如果没有你的代码使用jqGrid可以执行之前 jqGrid JavaScript是准备好了。

我建议您不包括 grid.loader.js。您可以在grid.loader.js中以相同的顺序手动包含grid.loader.js中可能需要的所有文件。您可以尝试使用我在my answer in trirand forum中描述的变通方法的另一种方法。我对解决方法的唯一限制是:您不能在开头使用具有XML标头的XHTML代码。