关于 Sys.ScriptLoadFailedException

在做一个项目,延续前一个版本的功能,要使用一些 ASP.NET Ajax 的功能。可是我不甘心简单的使用 UpdatePanel,于是在读《ASP.NET Ajax 程序设计》,想了解的全面一些。已经有日子没有读这种很具体的技术书了,因为觉得没有意思,可是为了项目,没有办法。

前些日子写了一段在传统 Web 模式下 Postback 后显示 alert 功能的代码,今天决定针对 Ajax 做下改进,于是下午的二个多小时就浪费在一个细节的问题上,还好,最后搞定了。

基本的思路是这样的(因为直接调用 alert,是先弹出对话框,再完成页面加载,效果很不好):

  1. 使用 ScriptManager.RegisterClientScriptInclude 注册一个 JavaScript 文件
  2. 增加两个 HiddenField 用来存储错误信息和获得焦点的控件
  3. 调用 JavaScript 文件中的函数完成功能(在 body onload 事件中显示 alert)

但是 IE 总是提示 Sys.ScriptLoadFailedException: The script ... failed to load. Check for: Inaccessible path。我反复试了几种不同的方法,也确认了 JavaScript 路径是正确的,可是问题依旧。

最后终于想起了在《ASP.NET Ajax 程序设计》中 Dflying Chen 说的一段话:在浏览器成功下载 MicrosoftAjax.js 之后,客户端 ASP.NET Ajax 框架即刻开始初始化。因此后续的脚本文件必须在下载完成时发出通知,以便客户端 ASP.NET Ajax 框架接下来进行这部分脚本的初始化等后续操作。在 ASP.NET Ajax 页面中,每一个将要与客户端框架协同运行的脚本文件的末尾都必须包含如下一行代码,用来发出这个通知。

1if (typeof(Sys) != "undefined")
2
{
3
    Sys.Application.notifyScriptLoaded() ;
4}

就是这样的,加了上面的代码后,问题解决了。

posted on 2008-07-09 20:37  gucs  阅读(886)  评论(1编辑  收藏  举报

导航