Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

Sys is undefined - Erreur JavaScript avec Microsoft Ajax

Je débute ici une nouvelle série de post du style Question/Réponse/Explication. Il s'agit dans la plupart des cas de questions posés sur le forum aspfr.com ou des questions que l'on me pose directement par mail, msn, ... Le but de cette série est d'abord de partager mon expérience pour vous aidez à corriger vos problèmes mais à la différence es réponses que je donne sur les forums il y aura un point d'explication qui explique plus précisément le problème ainsi que la solution, autrement dit le but n'est pas seulement de vous donner la réponse mais d'expliquer la réponse.

Question :

J'utilise le contrôle UpdatePanel dans ma page mais cela ne fonctionne pas, lorsque je clique sur un bouton toute ma page est rafraichit. Voici le code que j'utilise :

<asp:UpdatePanel id="UpdatePanel1" runat="server"> <contenttemplate> <asp:Label id="Label1" runat="server" Text="Label"></asp:Label> </contenttemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="Button1" /> </Triggers> </asp:UpdatePanel> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

J'ai aussi remarqué que lorsque je clique sur mon bouton j'ai un message d'erreur JavaScript : "Sys is undefined".

Réponse :

Le problème vient surement du Web.Config, celui ci n'a pas été modifié pour que Microsoft Ajax puisse fonctionner. Il faut au minimum rajouter cette ligne :

<configuration> <system.web> <httpHandlers> <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> ... </system.web> ... </configuration>

Explication :

L'erreur "Sys is undefined" pour IE ou "Sys is not defined" pour FF se produit car les fichiers JavaScript de Microsoft Ajax sont indisponible, en effet le ScriptManager va inclure automatiquement les fichiers JavaScript nécessaire au bon fonctionnement du framework client de Microsoft Ajax via ces lignes :

<script src="/ScriptResource.axd?d=V68EtXOYFP73VAKIPaON5vTPHqkLheZqF3UnjXvq8wo-r7vNdqoQSbbVauLUz-mhCwTRANBlv4c3z-L4yfWZdH3gjUwtKrMOUx5U_0sq8ys1&amp;t=633051893704717150" type="text/javascript"></script> <script src="/ScriptResource.axd?d=V68EtXOYFP73VAKIPaON5vTPHqkLheZqF3UnjXvq8wo-r7vNdqoQSbbVauLUz-mhCwTRANBlv4c3z-L4yfWZdBOq_-pc4gkOWg2S9Y-HfYU_52eTu-Lu2M9kaAkvwx340&amp;t=633051893704717150" type="text/javascript"></script>

Il va aussi faire appel à la fonction Sys.Application.initialize(); pour initialiser le framework client. Cette fonction est définit dans les fichiers JavaScript ajouté plus haut. C'est là que se situe le problème en effet si vous analyser les requêtes HTTP avec Fiddler vous voyez que les 2 fichiers ScriptResource.axd retourne une erreur 404. Ces pseudo-fichiers permettent de retourner un fichier de ressource stocké dans l'assembly System.Web.Extensions.dll. Pour que cela fonctionne il faut absolument enregistrer le handler System.Web.Handlers.ScriptResourceHandler dans le web.config.

La ligne a rajouté est la ligne minimal pour faire fonctionner les UpdatePanels, pour un fonctionnement optimal de Microsoft Ajax il faut rajouter d'autres lignes, un fichier de config exemple est disponible ici : "C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025\web.config"

Autres pistes de recherche :

  • Regarder avec fiddler les requêtes http pour voir si les fichiers de ressources sont OK.
  • Regarder si vous ne redéfinissez pas le namespace Sys quelque part dans votre page.
Posted: jeudi 10 mai 2007 15:14 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

ostenhard a dit :

Bonjour,

Cet article est très intéressant surtout que je rencontre le problème du 'Sys' is not defined en ce moment. En regardant avec Fiddler, je me suis rendu compte que, pour les ressources WebResource.axd et ScriptResource.axd, il y avait un retour indiquant qu'elles étaient introuvables.

Je suis donc à la recherche d'une solution sachant que mon web.config est correct (enfin peut-être pas) c'est-à-dire que la ligne ScriptResourceHandler est bien là.

Cordialement !

# septembre 17, 2007 20:27

cyril a dit :

Bonjour,

Quand tu dis que les fichiers WebResource.axd et ScriptResource.axd sont introuvable, c’est bien que tu as une erreur 404 ? Je ne vois pas de raisons qui fait que WebResource.axd tombe en 404. L’url est bien du genre http://host/[applicationName/]webresource.axd ? Je peux voir le web.config ?

L’handler WebResource.axd est configuré au niveau du web.config principal (C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config), c’est donc étonnant qu’il ne soit pas trouvé …

A bientôt,

# septembre 18, 2007 16:08

The Ugly a dit :

Bonjour,

je ne sais pas si j'avais exactement le même problème, en tout cas, mon updatepanel rechargait toute la page a chaque fois.

Je me suis rendu compte en analysant les réponses du serveur que le fichier WebResource.axd n'était pas transféré.

Apres 5 heures de recherche, j'ai finalement vu que la propriété

<xhtmlConformance mode="Legacy" />

# janvier 16, 2008 12:30

The Ugly a dit :

... j'ai finalement vu que la propriété

<xhtmlConformance mode="Legacy" />

# janvier 16, 2008 12:36

The Ugly a dit :

Un petit problème avec le code apparemment, désolé.

Je disais donc qu'il fallait commenter cette propriété pour que cela fonctionne.

En espérant avoir été utile,

Cordialement.

# janvier 16, 2008 13:15

cyril a dit :

Je viens de chercher, je croyais l'avoir bloggé mais non,

ASP.net Ajax n'est pas compatible avec le XhtmlConformance mode Legacy ... (c'est un des innombrables "bugs")

# janvier 16, 2008 14:01

riton a dit :

Bonjour,

Tout d'abord je tiens a te remercier pour ce blog qui m'a déjà souvent aidé.

Mais cette fois-ci je coince, j'obtiens une erreur "Sys is not defined" sur une des pages de mon site. J'utilise Ajax dans toutes les pages, mon web.config est bien paramétré, je n'ai aucune erreur de compilation et n'utilise aucun script avant l'appel de mon ScriptManger.

Mais je n'ai aucune trace d'appel des scripts "ScriptResource.axd" ou "WebResource.axd" coté client. (ce qui explique mon Sys not defined)

Y aurait-il une autre piste à explorer?

Merci d'avance.

# avril 20, 2008 19:11

riton a dit :

J'ai trouvé, c'était simplement un oubli.

Il ne faut surtout pas oublier la ligne :

"base.OnPreRenderComplete(e);"

lorsqu'on surcharge la méthode OnPreRenderComplete.

# avril 21, 2008 09:25
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01

- SharePoint Online: Script PowerShell pour supprimer une colonne dans tous les sites d’une collection par Blog Technique de Romelard Fabrice le 11-27-2018, 18:01