37 votes

Ajax discret ne fonctionne plus après la mise à jour de jQuery en 1.9.0

Je viens de mettre à jour jQuery & jQuery UI à : jquery-1.9.0.min.js et jquery-ui-1.9.2.min.js

Et... tous mes appels Ajax discrets (Ajax.ActionLink, Ajax.BeginForm) ont cessé de fonctionner correctement - ils ouvrent les résultats dans une nouvelle page au lieu de mettre à jour la div existante.

Et j'obtiens cette erreur javascript dans Firebug lorsque ma page se charge :

enter image description here

Le code n'a pas changé bien sûr, j'ai juste mis à jour les scripts jQuery en utilisant Nuget.

Quelqu'un a-t-il rencontré le même problème ?

Merci.

70voto

jason_ruz Points 1109

Mise à jour : Ce problème a été corrigé dans le dernier paquet NuGet. J'ai posté une autre réponse pour refléter cela. http://stackoverflow.com/a/15539422/714309


En jquery.unobtrusive-ajax.js trouvez et remplacez ces quatre lignes :

  1. $("a[data-ajax=true]").live("click", function (evt) {

    $(document).on("click", "a[data-ajax=true]", function (evt) {

  2. $("form[data-ajax=true] input[type=image]").live("click", function (evt) {

    $(document).on("click", "form[data-ajax=true] input[type=image]", function (evt) {

  3. $("form[data-ajax=true] :submit").live("click", function (evt) {

    $(document).on("click", "form[data-ajax=true] :submit", function (evt) {

  4. $("form[data-ajax=true]").live("submit", function (evt) {

    $(document).on("submit", "form[data-ajax=true]", function (evt) {

Vous pouvez également générer une nouvelle jquery.unobtrusive-ajax.min.js en utilisant WebGrease. À partir de l'invite de commande, allez dans le dossier de votre solution et entrez cette commande (en supposant que votre dossier de projet s'appelle Web ):

packages\WebGrease.1.3.0\tools\WG.exe -m -in:Web\Scripts\jquery.unobtrusive-ajax.js -out:Web\Scripts\jquery.unobtrusive-ajax.min.js

42voto

jason_ruz Points 1109

Mettre à jour le Microsoft jQuery Unobtrusive Ajax Paquet NuGet à la dernière version.

Dans Visual Studio, à partir de l'onglet Outils sélectionnez Gestionnaire de paquets de bibliothèque puis cliquez sur Console du gestionnaire de paquets . À l'invite, tapez :

Update-Package Microsoft.jQuery.Unobtrusive.Ajax

Ce problème a été corrigé dans la version 2.0.30116.0 (lundi 18 février 2013) de Microsoft jQuery Unobtrusive Ajax, qui a remplacé les appels à la fonction .live() (dépréciée dans les versions 1.7 et 1.8 de jQuery). supprimé de jQuery 1.9 ) avec la recommandation .on() méthode.

28voto

Oliver Spryn Points 4735

.live() a été déprécié depuis la version 1.7 et a été officiellement remplacé par supprimé dans jQuery 1.9 . Utilisez .on() car il s'agit de la méthode préférée pour effectuer l'opération. même chose .

10voto

Caleb Kiage Points 479

Le moyen le plus simple de résoudre les problèmes liés aux modifications apportées à jQuery (à mon avis) est d'installer l'option jQuery.Migrate qui vous permet d'utiliser des appels de fonction dépréciés qui ont été supprimés à partir de la version 1.9.0. Au moins jusqu'à ce que le plugin ajax discret soit mis à jour par Microsoft.

De plus, il semble que les constructions nocturnes du plugin ajax non intrusif ont mis à jour les appels api. Je ne l'ai pas encore testé mais vous pouvez trouver comment l'acquérir dans la section page asp.net codeplex .

MISE À JOUR : Les paquets Nuget Unobtrusive Ajax et Validation ont été mis à jour de façon à ce que l'outil de gestion de l'information soit disponible. jQuery.Migrate n'est plus nécessaire.

4voto

Simon_Weaver Points 31141

Il faut aussi faire ces corrections :

Mise à jour du plugin jQuery.Validation ( pour régler ce problème )

https://nuget.org/packages/jQuery.Validation/1.11.0    (first available on nuget 2/4/13)

Apportez également ces modifications à la jquery.unobtrusive-ajax.js fichier ( voir ici pour le numéro de Connect )

Line 43: replace = container.attr("data-valmsg-replace") && $.parseJSON(container.attr("data-valmsg-replace")) !== false;

Line 73: replace = container.attr("data-valmsg-replace") && $.parseJSON(container.attr("data-valmsg-replace"));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X