Sys не определено - PullRequest
       114

Sys не определено

60 голосов
/ 16 сентября 2008

У меня есть проект комплекта управления ASP.Net/AJAX, над которым я работаю. 80% времени нет проблем. Страница работает как надо. Если вы обновите страницу, иногда будет отображаться ошибка JavaScript «Sys не определен».

Это не происходит постоянно, но это воспроизводимо. Когда это происходит, пользователь должен закрыть свой браузер и снова открыть страницу.

Это наводит меня на мысль, что это может быть настройка 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>

Ответы [ 30 ]

53 голосов
/ 12 ноября 2009

Я исправил свою проблему, переместив блок <script type="text/javascript"></script>, содержащий вызовы Sys. *, Вниз (к последнему элементу перед закрытием раздела <asp:Content/> тела) в HTML на странице. У меня изначально был блок скрипта в разделе HEAD <asp:Content/> моей страницы. Я работал внутри страницы с MasterPageFile. Надеюсь, это кому-нибудь поможет.

12 голосов
/ 02 апреля 2010

Когда я столкнулся с ошибками

  • Sys не определен
  • Не удалось загрузить клиентскую среду ASP.NET Ajax

в IE при использовании элементов управления ASP.NET Ajax в .NET 2.0 мне нужно было добавить следующее в файл web.config в тегах <system.web>:

<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>
8 голосов
/ 23 июня 2013

Ответ Дина Л. https://stackoverflow.com/a/1718513/292060 работал на меня, так как мой звонок в Sys также был слишком ранним. Так как я использую jQuery, вместо того, чтобы перемещать его вниз, я помещаю скрипт в документ document.ready

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

Кажется, уже достаточно поздно, чтобы Sys был доступен.

7 голосов
/ 16 сентября 2008

Попробуйте настроить ScriptManager на это.

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" /> 
6 голосов
/ 19 февраля 2012

Я использовал telerik, и у меня была точно такая же проблема.

добавление этого в web.config решило мою проблему:)

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

Может быть, это вам тоже поможет. это была проблема аутентификации.

Источник

5 голосов
/ 17 августа 2015

Попробуйте одно из следующих решений:

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. Необходимая конфигурация для ScriptResourceHandler не существует для web.config для вашего приложения

Убедитесь, что ваш web.config содержит записи из файла web.config по умолчанию, предоставляемого при установке расширений. (расположение по умолчанию: C: \ Program Files \ Microsoft ASP.NET \ ASP.NET 2.0 AJAX Extensions \ v1.0.61025)

3. Виртуальный каталог, который вы используете для своей сети, неправильно помечен как приложение (таким образом, конфигурация не загружается). Это может произойти для веб-сайтов IIS.

Убедитесь, что вы используете веб-приложение, а не просто виртуальный каталог

4. Запросы ScriptResource.axd возвращают 404

Обычно это указывает на неправильную настройку ASP.NET в целом. При установке ASP.NET по умолчанию любой веб-запрос к ресурсу, оканчивающемуся на .axd, передается из IIS в ASP.NET с помощью сопоставления isapi. Кроме того, сопоставление настроено так, чтобы не проверять, существует ли файл. Если это сопоставление не существует или проверка наличия файла не отключена, IIS попытается найти физический файл ScriptResource.axd, не найдет его и вернет 404.

Вы можете проверить, является ли это проблемой, скопировав / вставив полный 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», который выполняет полную регистрацию ASP.NET в IIS и обеспечивает включение ISAPI в IIS6. Вы также можете запустить «aspnet_regiis -s w3svc / 1 / root / MyWebApp», чтобы исправить только регистрацию для вашего веб-приложения.

5. Устранение ошибки «Sys is undefined» в ASP.NET AJAX RTM под IIS 7

Поставьте эту запись под <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-undefined http://geekswithblogs.net/lorint/archive/2007/03/28/110161.aspx

5 голосов
/ 23 ноября 2010

Вы должны добавить эти строки в 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>

Надеюсь, это поможет.

4 голосов
/ 19 сентября 2008

В дополнение к тому, что у вас есть ScriptManager на вашей странице, вам необходимо убедиться, что ваш web.config настроен соответствующим образом.

Когда был выпущен ASP.NET AJAX 1.0 (для .NET 2.0), было много пользовательских настроек web.config, которые добавляли обработчики, элементы управления и т. Д.

Вы найдете информацию о конфигурации здесь: http://www.asp.net/AJAX/documentation/live/ConfiguringASPNETAJAX.aspx

3 голосов
/ 14 октября 2008

Убедитесь, что в ваших клиентских скриптах, взаимодействующих с .NET AJAX, в конце указана следующая строка:

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

Это сообщает диспетчеру сценариев, что весь файл сценария загружен и что он может начать вызывать методы клиента

2 голосов
/ 19 октября 2017

Я ненавижу добавлять к такой огромной теме и так много позже, но я думаю, что у меня есть решение, которое работает как минимум в VS2015.

Я пытался найти причину ошибки sys, и единственное решение, которое мне помогло, это добавить EnableCdn="true" в ScriptManager, например так:

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

См. MSDN для получения дополнительной информации.

Зачем нам это нужно?

При работе с веб-приложением asp.net необходимо включить CDN, чтобы Microsoft могла загрузить библиотеку Sys..

Возможно, на вашей странице был скрипт, который использовал функцию Sys. Установка EnableCdn="true" обеспечит загрузку библиотеки Sys перед ее использованием.

Что такое CDN?

Цитата из https://www.sitepoint.com/7-reasons-to-use-a-cdn/

Большинство CDN используются для размещения статических ресурсов, таких как изображения, видео, аудио клипы, файлы CSS и JavaScript. Вы найдете общий JavaScript библиотеки, HTML5-шиммы, CSS-перезагрузки, шрифты и другие доступные ресурсы на различных государственных и частных системах CDN.

У Google и Microsoft есть CDN. Все, что вам нужно сделать, это добавить ссылку. Обычно CDN добавляются через ресурс скрипта:

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

Как только вы установите EnableCdn="true", и Microsoft добавит небольшую ссылку на CDN (как выше) на странице, которая загружает библиотеку Sys.

Надеюсь, это поможет любому, кто столкнулся с той же проблемой.

...