it-swarm.cn

系统未定义

我正在开发一个ASP.Net/AJAX控件包项目。 80%的时间没有问题。页面应该运行。如果您刷新页面,它有时会显示一个javascript错误“系统未定义”。

它不会一直发生,但它是可重复的。当它发生时,用户必须关闭他们的浏览器并重新打开页面。

这让我相信它可能是IIS设置。

另一个说明。当我收到错误时,我查看了页面源,何时没有。当页面抛出错误时,缺少以下代码:

<script src="/ScriptResource.axd?d=EAvfjPfYejDh0Z2Zq5zTR_TXqL0DgVcj_h1wz8cst6uXazNiprV1LnAGq3uL8N2vRbpXu46VsAMFGSgpfovx9_cO8tpy2so6Qm_0HXVGg_Y1&amp;t=baeb8cc" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
//]]>
</script>
59
James

我通过在页面上的HTML中将包含Sys。*调用的<script type="text/javascript"></script>块向下移动(到主体的<asp:Content/>部分关闭之前的最后一项)来解决我的问题。我最初在我的页面的HEAD <asp:Content/>部分有我的脚本块。我在一个有MasterPageFile的页面内工作。希望这有助于某人。

53
Dean L

当我遇到错误时

  • 系统未定义
  • ASP.NET Ajax客户端框架无法加载

在IE中,当在.NET 2.0中使用ASP.NET Ajax控件时,我需要将以下内容添加到<system.web>标记内的web.config文件中:

<httpHandlers>
  <remove verb="*" path="*.asmx"/>
  <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  <add verb="GET" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler" validate="false"/>
</httpHandlers>
12
Ray Vega

Dean的回答, https://stackoverflow.com/a/1718513/292060 为我工作,因为我对Sys的打电话还为时过早。由于我使用的是jQuery,而不是将其移动,我将脚本放在document.ready调用中:

$(document).ready(function () {
  Sys. calls here
});

这似乎已经足够晚,Sys可用。

8
goodeye

尝试将ScriptManager设置为此。

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" /> 
7
Compulsion

我正在使用telerik并且遇到了完全相同的问题。

将此添加到web.config解决了我的问题:)

<location path="Telerik.Web.UI.WebResource.axd">   
   <system.web>  
     <authorization>  
       <allow users="*"/>  
     </authorization>  
   </system.web>  
</location>

也许它也会对你有所帮助。这是身份验证问题。

资源

6
Zviadi

尝试以下解决方案之一:

1.浏览器无法加载压缩脚本

如果您在IE6上收到错误,通常就是这种情况,但在其他浏览器上却没有。

脚本资源处理程序 - ScriptResource.axd在将脚本返回到浏览器之前压缩脚本。在RTM之前的版本中,处理程序一直为所有浏览器执行此操作,并且它不可配置。 IE6的某个组件中存在一个问题,即无法正确加载压缩脚本。请参阅知识库文章 此处 。在RTM版本中,我们为此做了两个修复。一,如果IE6是浏览器客户端,我们不压缩。二,我们现在已经进行了压缩配置。以下是切换web.config的方法。

你是如何解决的?首先,确保使用AJAX Extensions 1.0 RTM版本。仅此一点就足够了。您还可以通过编辑web.config来尝试关闭压缩,以获得以下内容:

<system.web.extensions>
<scripting>
<scriptResourceHandler enableCompression="false" enableCaching="true" />
</scripting>
</system.web.extensions>

2.对于应用程序的web.config,ScriptResourceHandler所需的配置不存在

确保您的web.config包含随extensions install提供的默认web.config文件中的条目。 (默认位置:C:\ Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025)

3.您用于Web的虚拟目录未正确标记为应用程序(因此配置未加载) - IIS Web会发生这种情况。

确保您使用的是Web应用程序,而不仅仅是虚拟目录

4. ScriptResource.axd请求返回404

这通常表明ASP.NET整体错误配置。在ASP.NET的默认安装中,对以.axd结尾的资源的任何Web请求都通过isapi映射从IIS传递到ASP.NET。此外,映射配置为不检查文件是否存在。如果该映射不存在,或者检查文件是否存在未被禁用,则IIS将尝试查找物理文件ScriptResource.axd,找不到它,并返回404。

您可以通过从这里coipy /粘贴完整URL到ScriptResource.axd来检查这是否是问题,并查看它返回的内容

<script src="/MyWebApp/ScriptResource.axd?[snip - long query string]" type="text/javascript"></script>

你是如何解决这个问题的?如果没有正确安装ASP.NET,您可以运行“aspnet_regiis.exe”命令行工具来修复它。它位于C:\ WINDOWS\Microsoft.Net\Framework\v2.0.50727中。您可以运行“aspnet_regiis -i -enable”,它使用IIS完整注册ASP.NET,并确保在IIS6中启用了ISAPI。您还可以运行“aspnet_regiis -s w3svc/1/root/MyWebApp”来仅修复Web应用程序的注册。

5.在AJAX 7下的ASP.NET RTM IIS中解决“系统未定义”错误

将此条目放在<system.webServer/><handlers/>下:

<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

并删除<system.web/><httpHandlers/>下的那个。

参考文献: http://weblogs.asp.net/chrisri/demystifying-sys-is-undefinedhttp://geekswithblogs.net/lorint/archive/2007/03/28/110161.aspx

5
Alex N.

您必须在web.config中添加这些行

<httpHandlers>
  <remove verb="*" path="*.asmx"/>
  <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
</httpHandlers>
<httpModules>
  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
</system.web>

希望这可以帮助。

5
Alcides Martínez

除了确保在页面上有ScriptManager之外,还需要确保正确配置了web.config。

当ASP.NET AJAX 1.0发布时(对于.NET 2.0),有很多自定义web.config设置,它们添加了处理程序,控件等。

你可以在这里找到配置信息: http://www.asp.net/AJAX/documentation/live/ConfiguringASPNETAJAX.aspx

4
Aaron Powell

确保您拥有与.NET AJAX交互的任何客户端脚本在最后都有以下行:

if (typeof(Sys) !== 'undefined')  Sys.Application.notifyScriptLoaded();

这告诉脚本管理器整个脚本文件已加载,并且它可以开始调用客户端方法

3
Tom Carter

我讨厌添加这么大的话题以及以后,但我认为我有一个至少可以在VS2015中运行的解决方案。

我正在寻找查找sys错误的原因,唯一对我有用的解决方案是在ScriptManager中添加EnableCdn="true",如下所示:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnableCdn="true" />

有关更多信息,请参阅MSDN。

为什么我们需要这样做?

在使用asp.net Web应用程序时,您必须启用CDN,以便Microsoft可以下载Sys.库。

您的页面中可能有一个脚本正在使用Sys函数。设置EnableCdn="true"将确保在使用之前下载Sys库。

什么是CDN?

引自 https://www.sitepoint.com/7-reasons-to-use-a-cdn/

大多数CDN用于托管静态资源,如图像,视频,音频剪辑,CSS文件和JavaScript。您可以在各种公共和私人CDN系统上找到常见的JavaScript库,HTML5填充程序,CSS重置,字体和其他资源。

谷歌和微软都有CDN。您所要做的就是添加一个参考。通常通过脚本资源添加CDN:

<script src="https://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjax.js" type="text/javascript"></script>

设置EnableCdn="true"后,Microsoft将在下载Sys库的页面中添加它的小CDN引用(如上所述)。

我希望能帮助遇到同样问题的人。

2
Hawkeye

我遇到了同样的问题,经过多次争吵之后,我决定尝试隔离问题并简单地将脚本管理器加载到一个空页面中,这仍然会导致同样的错误。通过将我的网站的web.config与一个全新的(工作)测试网站进行比较,我发现了我发现的问题,该网站在我的web.config的system.web部分中将<compilation debug="true">更改为<compilation debug="false">解决了这个问题。

我还必须从system.web中删除<xhtmlConformance mode="Legacy"/>条目,以使更新面板正常工作。 单击此处 获取此问题的说明。

2
MadMax1138

在我的情况下,问题是我已经推出以下代码以在部分回发后保留gridview表头:

    protected override void OnPreRenderComplete(EventArgs e)
    {
        if (grv.Rows.Count > 0)
        {
            grv.HeaderRow.TableSection = TableRowSection.TableHeader;
        }
    }

删除此代码可以解决此问题。

1
Fernando Meneses Gomes

我通过创建单独的asp.net ajax解决方案并将所有ajax配置从web.config复制并粘贴到工作项目来解决了这个问题。

这是您应该在web.config中设置的必备配置

    <configuration>
<configSections>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
</sectionGroup>

    </sectionGroup>
</configSections>
        <assemblies>

            <add Assembly="System.Web.Extensions,     Version=1.0.61025.0,       Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

        </assemblies>
           </compilation>
        <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
    </httpHandlers>
    <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </httpModules>
</system.web>
    <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
        <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </modules>
    <handlers>
        <remove name="WebServiceHandlerFactory-Integrated"/>
        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </handlers>
</system.webServer>
1
Zara_me

将我的AjaxControlToolkit.dll从4.1.60623.0更新到最新版本4.1.7.725后,我遇到了同样的问题。我已经搜索到了这个页面,但没有一个答案对我有帮助。在查看CodePlex Zip文件中的Ajax Control Toolkit的示例网站后,我意识到<asp:ScriptManager>被新的<ajaxtoolkit:ToolkitScriptManager>替换。我这样做了没有 Sys.Extended未定义 更多。

1
Farschidus

如果以上都不适合您,并且您碰巧重写OnPreRenderComplete,请确保调用base.OnPreRenderComplete。我的治疗师会很高兴见到我

1
David Glass

在我的情况下,我发现了一个非常隐藏的原因...这个页面路由在 Global.ascx.cs 它没有出现在我的测试子文件夹中但返回问题错误所有时间..另一天有奇怪的问题。

routes.MapPageRoute("siteDefault", "{culture}/", "~/default.aspx", false, new RouteValueDictionary(new { culture = "(\\w{2})|(\\w{2}-\\w{2})" }));
0
hsobhy

即使为web配置添加正确的条目仍然会出现此错误?此错误的最常见原因是过早引用Sys名称空间的JavaScript。然后最明显的修复是将Java脚本块移动到ScriptManager控件下面:

0
Mahesh

确保您没有任何更改网址的重写规则。

在我的情况下,应用程序认为它只是达到了网址的深度。

示例: http://mysite.com/app/page.aspx 是真正的网址。但我切断了/ app /这对于ASP.net和WCF来说很好,但显然不适用于Ajax。

0
Max

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded(); 

请检查 在此输入链接描述

0
Jawad Siddiqui
  • Dev-Env:VS 2012
  • 外汇:4.0/4.5
  • 实现:Master(ScriptManager + UpdatePanel/Timer)+内容(UpdatePanel)
  • 模式:PageRouting。

免责声明:

如果所有web.config解决方案都不适合您并且您已实现PageRouting(IIS 7+),那么下面的代码片段将解决您的问题。

背景:

不要意味着Highjack这个问题,但与其他人有同样的问题,并在这里实施了100%的建议,对.Net 4.0/4.5进行了少量修改,但没有一个适合我。

在我的情况下,我实施 页面路由 这是重影我的问题。基本上它可以工作大约20左右,调试运行,然后BAM会出错Sys is undefined错误。

在回顾了其他一些帖子后,我们开始谈论Clean-URL逻辑,我记得我已经完成了PageRouting设置。

这是我用来构建模式的资源: 页面路由

我的单行代码修复了我的VS2012调试问题:

rts.Ignore("{resource}.axd/{*pathInfo}")    'Ignores any Resource cache references, used heavily in AJAX interactions.
0
GoldBishop

这听起来很愚蠢,但我在VS2010中开发并托管在VS Dev Server中的网站遇到了类似的问题。有问题的页面有一个scriptmanager来创建与wcf服务的连接。我为服务添加了一个额外的方法,这个错误开始出现了。

为我修复的是在oroject Web设置中使用不同的端口号从“自动分配端口”更改为“特定端口”。

我希望我知道为什么......

0
Carl Onager

有一个类似的问题,除了我的页面始终生成Sys是未定义的错误。

对我来说,问题源于我刚刚为.NET 2.0安装了AJAX 1.0扩展,但已经在Visual Studio中创建了我的Web项目。

当试图创建AJAX控件时,我一直遇到这个错误,我在这里发现了Slace和MadMax1138s的帖子。并且认为这是我的web.config,我使用新的“支持AJAX的网站”项目类型创建了一个新项目,果然web.config有大量的自定义需要使用AJAX控制。

我刚刚用web.config更新了web.config,我已经自己做了并将它放到我现有的项目中,一切正常。

0
TygerKrash

我有同样的问题,但我通过以下方式修复:

将脚本文件放入页面时,请确保它是

<script></script> and not <script />.

我跟着这个: http://forums.asp.net/t/1742435.aspx?An+element+with+id+form1+could+not+be+found+Script+error+on+page+load

希望这会有所帮助

0
onlyme

我今天看到完全相同的错误,但它不是配置或直接JavaScript问题。

外部.net项目已更新,但在网站编译中未正确检索到更改。我的假设是ASP.NET ajax无法正确构造.NET对象的客户端表示,因此无法正确加载。

为了解决这个问题,我重建了外部项目,并重建了我遇到问题的解决方案。问题消失了。

0
gb2d

我遇到了类似的问题,令我惊讶的是,我发现我的一位开发人员将web.config保存在与 web123.config相同的文件夹/解决方案中 并错误地上传了这两个文件。

一旦我删除了 web123.config 文件,这个错误消失了,ajax框架正确加载。即使我有

<compilation debug="true">

在我的情况下,我也有以下部分。我的项目使用框架3.5

    <httpHandlers>
  <remove verb="*" path="*.asmx"/>
  <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
</httpHandlers>
<httpModules>
  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
</system.web>
0
v s

我不认为这一点已被添加,因为我只是花了一些时间来寻找它,我希望它可以帮助。

我正在使用IIS 7并使用ASP.NET v4 Framework。
在我的情况下, 重要的是将条目添加到web.config文件中的条目和部分。

我的web.config文件有很多处理程序,在我的例子中,最简单的方法是将ScriptResources条目添加到处理程序部分的顶部。 最重要的是,它需要放在任何将充当通配符并捕获请求的条目之前。 在通配符输入后添加它将导致它被忽略,错误仍然会出现。

模块可以添加到部分的顶部或底部。

Web.config示例:

<system.webServer>
    <handlers>
      <clear />
      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      <!-- Make sure wildcard rules are below the ScriptResource tag -->
    </handlers>
    <modules>
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <!-- Other modules are added here -->
    </modules>
  </system.webServer>
0
RacerNerd

我在使用Ajax Control Toolkit ToolkitScriptManager和URL Write 2.0的组合时发现了错误。

在我的<rewrite> <outboundRules>中,我有一个先决条件:

<preConditions>
    <preCondition name="IsHTML">
        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html"/>
    </preCondition>
</preConditions>

但显然我的一些出站规则没有设置为使用前置条件。

一旦我对所有出站规则设置了preCondition:

<rule preCondition="IsHTML" name="MyOutboundRule">

没有更多问题。

0
JonK

请检查服务器是否设置了正确的时间和日期...

大约浪费了6个小时之后,我在某处读到了......

必须更新服务器的日期和时间才能正常工作......

否则你会得到'Sys'是未定义的错误。

0
Arsalan