0

我现在得到“无法加载 ASP.NET Ajax 客户端框架”。我的 asp.net 4 网站一运行就出现 javascript 错误(打开登录页面)。

它过去只发生在我在调试时在浏览器中按 Ctrl-F5(刷新页面和所有图像/样式表/脚本)之后。

我的应用程序使用 asp.net 4(最初写在 1.1 或 2)、WCF、JsTree、一些 Telerik 控件和 MS AJAX 扩展/工具包。

在几天的谷歌搜索中,我发现了有同样问题的人给出的大量解决方案(包括 SO 和 Telerik 的帮助论坛上的解决方案):

我尝试了以下方法,没有一个对我有用:

  • 尝试在页面上放置 ToolkitScriptManager 而不是 ScriptManager
  • 转到“程序和功能”控制面板并在“Microsoft .net framework 4 Client profile”和“Microsoft .net framework 4 Extended”上进行“修复”
  • 将 ScriptManager 移动到页面底部
  • 在 Web.config 中,设置编译 debug="false"
  • 开始了一个新的 ASP.NET 4 项目,在页面中添加和更新了面板,查看了 web.config 并试图让我的 web.config 看起来更像它
  • 检查PC的系统日期是否正确
  • 在我的 web.config 中使用 location 元素来允许未经身份验证的访问 WebResource.axd、ScriptResource.axd 和 Telerik.Web.UI.WebResource.axd(我在这个站点中有 Telerik 控件)
  • 添加 routes.Ignore("{resource}.axd/{*pathInfo}"); 到我在 global.asax 中的路线注册

这个问题还有其他解决方案吗?

如果需要,我可以发布 web.config 或代码。

更新 1:更多信息
我查看了使用 firebug 的“net”选项卡发生的情况。对 ScriptResource.axd 和 Webresource.axd 的 GET 请求都以 404 失败。这是否进一步说明了这个问题?

更新 2:部分解决方案? 在向网站添加 WCF 服务之前,我使用源代码控制历史记录将 web.config 恢复到原来的状态。最终起作用的 web.config 就在我添加这个之前:

<system.serviceModel>
    <behaviors>
        <endpointBehaviors>
            <behavior name="FoldersAspNetAjaxBehavior">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <services>
        <service name="Folders">
            <endpoint address="" behaviorConfiguration="FoldersAspNetAjaxBehavior" binding="webHttpBinding" contract="Folders" />
        </service>
    </services>
</system.serviceModel> 

...并从我的 global.asax 中删除了关联的路由线:

routes.Add(new System.ServiceModel.Activation.ServiceRoute("", new System.ServiceModel.Activation.WebServiceHostFactory(), typeof(Folders)));

所以其中一个或两个都是罪魁祸首。谁能建议 WCF 服务或其路由如何导致此 MS Ajax 错误?

这是我的第一个 WCF 服务。我几乎不明白上面的代码在做什么,但我怀疑路由问题是某个地方问题的核心......

或者- 任何人都可以建议 WCF 的替代方案吗?如果我能以另一种方式将我的 JSON 数据传递给 jquery,我可以没有它。可能是 HttpHandler,或者 WebService,或者将 JSON 作为 response.write 吐出的 webform 之类的?

更新 2:路由
看起来 WCF 服务所需的 global.asax 中的路由内容是问题所在(见上文)。注释掉一行似乎可以解决问题。打算尝试更改路线路径...

已解决:我自己解决了,看到我接受的答案,但如果没有一些非常有见地的答案的正确建议,肯定不可能这么快完成,谢谢大家。

4

7 回答 7

1

安装可以将请求记录到服务器的浏览器扩展程序。例如,Firefox 的 FireBug。然后您需要检查浏览器向您的服务器发出的所有请求,看看是否有任何错误或响应太短。

于 2011-01-25T10:02:28.903 回答
1

不确定 ajax 错误,但是如果您正在处理简单的 xml / json web 服务,您真的不需要 wcf ......我已经用 restful xml / json web 服务替换了我们大多数基于 wcf 的服务......大多数这些服务实际上是一个简单的 aspx 文件,我在其中以 xml / json 输出我的结果

.net 框架带有内置的 xml / json 阅读器和编写器,您可以使用它们将数据结构(如果有)转换为 xml / json

一个例子:您可以使用 XmlTextWriter 类直接写入 Response.OutputStream。例如:

XmlTextWriter xtw = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
xtw.WriteStartDocument();
于 2011-01-28T12:35:30.623 回答
1

您几乎可以肯定没有 WCF。添加一个简单的 Web 服务,并为要为 JSON 或 XML 进行的每个异步调用添加一个方法。您需要了解的两个属性是WebMethodscriptservice

可以在此处找到有关将它们与 jQuery 一起使用的演练

于 2011-01-29T20:25:28.307 回答
1

可能是这两个处理程序已被 WCF 劫持。您可以尝试手动重新添加处理程序。如果你合并

<httpHandlers>
  <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="true"/>
</httpHandlers>

到您的网络配置,WebResource.axd 是否仍返回 404?

于 2011-01-29T20:50:16.520 回答
1

我认为这个问题与 .net 框架版本的变化有关。

错误是它无法加载客户端库。还有一些 404 错误表明问题在于未从服务器检索文件。

所以所有的鸭子都需要排成一排:

  • 正确版本的 asp_net 已注册
  • web.config 中的设置使用正确版本的框架
  • 应用程序池配置为使用正确版本的框架
于 2011-01-30T22:29:23.940 回答
0

就我而言,真正解决它的是改变我调用 WCF 服务的方式。

从我在 WCF 上阅读的教程中,我错过了不需要在 Global.asax 中路由来调用 Web 服务的事实,我可以这样称呼它:

http://localhost/myWebApp/WcfService.svc/MethodName?param=value

(我一直依靠 global.asax 中的路由让我这样称呼它: http://localhost/myWebApp/MethodName?param=value。我摆脱了路由并改用上述方式,问题出在消失了)

感谢大家有见地的回答。

于 2011-02-11T03:47:21.143 回答
0

我有问题。这是由于从 global.asax 文件路由,所有脚本都重定向到其他页面,因此很难找到该页面的 ajax 脚本文件。

于 2011-02-19T11:11:32.533 回答