true net license form data asp jquery asp.net-mvc-3 unobtrusive-ajax

net - El Ajax discreto dejó de funcionar después de la actualización jQuery a 1.9.0



jquery unobtrusive ajax (8)

Actualice el paquete Microsoft jQuery Unobtrusive Ajax NuGet a la última versión.

En Visual Studio, desde el menú Herramientas , seleccione Library Package Manager y luego haga clic en Package Manager Console . Cuando se le solicite, escriba:

Update-Package Microsoft.jQuery.Unobtrusive.Ajax

Este problema se resolvió en Microsoft jQuery Unobtrusive Ajax 2.0.30116.0 (lunes, 18 de febrero de 2013), que reemplazó las llamadas al método .live() desaprobado en jQuery 1.7 y eliminado de jQuery 1.9 con el .on() recomendado .on() método.

Acabo de actualizar jQuery & jQuery UI a: jquery-1.9.0.min.js y jquery-ui-1.9.2.min.js

Y ... todas mis discretas llamadas a Ajax (Ajax.ActionLink, Ajax.BeginForm) dejaron de funcionar correctamente: abren los resultados en una nueva página en lugar de actualizar el div existente.

Y obtengo este error de javascript en Firebug cuando carga mi página:

El código no ha cambiado, por supuesto, solo actualizó las secuencias de comandos jQuery usando Nuget.

¿Alguien experimentó el mismo problema?


Aquí hay un archivo minificado real que debería funcionar para usted. Funciona para mí de todos modos. Solo lo edité manualmente.

/* ** Unobtrusive Ajax support library for jQuery ** Copyright (C) Microsoft Corporation. All rights reserved. */ (function(a){var b="unobtrusiveAjaxClick",g="unobtrusiveValidation";function c(d,b){var a=window,c=(d||"").split(".");while(a&&c.length)a=a[c.shift()];if(typeof a==="function")return a;b.push(d);return Function.constructor.apply(null,b)}function d(a){return a==="GET"||a==="POST"}function f(b,a){!d(a)&&b.setRequestHeader("X-HTTP-Method-Override",a)}function h(c,b,e){var d;if(e.indexOf("application/x-javascript")!==-1)return;d=(c.getAttribute("data-ajax-mode")||"").toUpperCase();a(c.getAttribute("data-ajax-update")).each(function(f,c){var e;switch(d){case"BEFORE":e=c.firstChild;a("<div />").html(b).contents().each(function(){c.insertBefore(this,e)});break;case"AFTER":a("<div />").html(b).contents().each(function(){c.appendChild(this)});break;default:a(c).html(b)}})}function e(b,e){var j,k,g,i;j=b.getAttribute("data-ajax-confirm");if(j&&!window.confirm(j))return;k=a(b.getAttribute("data-ajax-loading"));i=b.getAttribute("data-ajax-loading-duration")||0;a.extend(e,{type:b.getAttribute("data-ajax-method")||undefined,url:b.getAttribute("data-ajax-url")||undefined,beforeSend:function(d){var a;f(d,g);a=c(b.getAttribute("data-ajax-begin"),["xhr"]).apply(this,arguments);a!==false&&k.show(i);return a},complete:function(){k.hide(i);c(b.getAttribute("data-ajax-complete"),["xhr","status"]).apply(this,arguments)},success:function(a,e,d){h(b,a,d.getResponseHeader("Content-Type")||"text/html");c(b.getAttribute("data-ajax-success"),["data","status","xhr"]).apply(this,arguments)},error:c(b.getAttribute("data-ajax-failure"),["xhr","status","error"])});e.data.push({name:"X-Requested-With",value:"XMLHttpRequest"});g=e.type.toUpperCase();if(!d(g)){e.type="POST";e.data.push({name:"X-HTTP-Method-Override",value:g})}a.ajax(e)}function i(c){var b=a(c).data(g);return!b||!b.validate||b.validate()}a(document).on("click", "a[data-ajax=true]", function(a){a.preventDefault();e(this,{url:this.href,type:"GET",data:[]})});a(document).on("click", "form[data-ajax=true] input[type=image]", function(c){var g=c.target.name,d=a(c.target),f=d.parents("form")[0],e=d.offset();a(f).data(b,[{name:g+".x",value:Math.round(c.pageX-e.left)},{name:g+".y",value:Math.round(c.pageY-e.top)}]);setTimeout(function(){a(f).removeData(b)},0)});a(document).on("click","form[data-ajax=true] :submit", function(c){var e=c.target.name,d=a(c.target).parents("form")[0];a(d).data(b,e?[{name:e,value:c.target.value}]:[]);setTimeout(function(){a(d).removeData(b)},0)});a(document).on("submit","form[data-ajax=true]",function(d){var c=a(this).data(b)||[];d.preventDefault();if(!i(this))return;e(this,{url:this.action,type:this.method||"GET",data:c.concat(a(this).serializeArray())})})})(jQuery);


La forma más fácil de solucionar problemas con los cambios de última hora en jQuery (en mi opinión) es instalar el paquete jQuery.Migrate que le permite usar llamadas a funciones obsoletas que se eliminaron en la versión 1.9.0 en adelante. Al menos hasta que Microsoft actualice el discreto complemento ajax.

Además, parece que la compilación nocturna del discreto complemento ajax ha actualizado las llamadas de API. Aún no lo he probado, pero puede averiguar cómo adquirirlo en la página codeplex de asp.net .

ACTUALIZACIÓN: los paquetes Unobtrusive Ajax y Validation Nuget se actualizaron por lo que el paquete jQuery.Migrate ya no es necesario.


Reemplazar

.live(function)

Con

.on(eventType, selector, function)

https://.com/a/14354091/358906


También necesita hacer estas correcciones:

Actualizar el complemento jQuery.Validation ( para solucionar este problema )

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

jquery.unobtrusive-ajax.js también estos cambios en el archivo jquery.unobtrusive-ajax.js ( consulte aquí el problema 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"));


.live() ha quedado en desuso desde 1.7 y se eliminó oficialmente en jQuery 1.9 . Utilice .on() lugar, ya que es el método preferido para hacer lo mismo .


Actualización: este problema se ha solucionado en el último paquete NuGet. He publicado otra respuesta para reflejar esto. https://.com/a/15539422/714309

En jquery.unobtrusive-ajax.js , busca y reemplaza estas cuatro líneas:

  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) {

También puede generar un nuevo jquery.unobtrusive-ajax.min.js usando WebGrease. Desde el símbolo del sistema, cambie a su carpeta de solución e ingrese este comando (suponiendo que su carpeta de proyecto se llame 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


Simplemente actualice sus Scripts

1. Descargue la última versión de Jquery (aunque utilicé jquery-1.11.0)

2. Descargue el último Microsoft.jQuery.Unobtrusive.Ajax de Microsoft official

De aquí:

https://github.com/aspnet/jquery-ajax-unobtrusive

3. Actualice o borre la caché de su navegador y revise su página nuevamente.

Hope ayuda a alguien