在将jQuery更新到1.9.0后,不显眼的Ajax停止工作

mon*_*tro 37 jquery asp.net-mvc-3 unobtrusive-ajax

我刚刚将jQuery和jQuery UI更新为:jquery-1.9.0.min.js和jquery-ui-1.9.2.min.js

并且...我所有不引人注意的Ajax调用(Ajax.ActionLink,Ajax.BeginForm)都停止正常工作 - 它们在新页面中打开结果,而不是更新现有的div.

当我的页面加载时,我在Firebug中收到此javascript错误:

在此输入图像描述

代码当然没有改变,只是使用Nuget更新了jQuery脚本.

有人经历过同样的问题吗?

jas*_*ruz 70

更新:此问题已在最新的NuGet包中修复.我发布了另一个答案来反映这一点. /sf/answers/1087759571/


jquery.unobtrusive-ajax.js,找到并替换这四行:

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

您还可以jquery.unobtrusive-ajax.min.js使用WebGrease 生成新的.从命令提示符,切换到您的解决方案文件夹并输入此命令(假设您的项目文件夹被调用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
Run Code Online (Sandbox Code Playgroud)

  • 线115,124,140和151; 你也可以使用在线缩小器,但很好的答案. (2认同)
  • 尝试其他答案自动更新文件:http://stackoverflow.com/a/15539422/714309 (2认同)

jas*_*ruz 42

Microsoft jQuery Unobtrusive Ajax NuGet包更新到最新版本.

在Visual Studio中,从" 工具"菜单中选择" 库包管理器",然后单击" 包管理器控制台".在提示符下键入:

Update-Package Microsoft.jQuery.Unobtrusive.Ajax
Run Code Online (Sandbox Code Playgroud)

此问题已在Microsoft jQuery Unobtrusive Ajax 2.0.30116.0(2013年2月18日,星期一)中修复,该.live()方法使用推荐的方法替换了对方法的调用(在jQuery 1.7中弃用并从jQuery 1.9中删除).on().

  • 现在这是最好的解决方案.此外,请确保在升级JavaScript包时清除浏览器的缓存. (2认同)

Oli*_*ryn 28

.live()自1.7以来已被弃用,并在jQuery 1.9中被正式删除.请.on()改用,因为它是做同样事情的首选方法.

  • 实际上`.delegate()`也被弃用了:-)现在你想要的是`.on()`. (3认同)
  • 您也可以只包含jQuery Migrate插件,旧代码​​应该可以工作.一旦更新旧插件,请记得删除它.https://github.com/jquery/jquery-migrate#readme (2认同)

Cal*_*age 10

解决jQuery中的重大变化问题的最简单方法(在我看来)是安装jQuery.Migrate允许您使用在1.9.0版本中删除的已弃用函数调用的包.至少在微软更新不引人注目的ajax插件之前.

此外,似乎不引人注目的ajax插件的每晚构建已更新api调用.我还没有测试过,但您可能会在asp.net codeplex页面中找到如何获取它.

更新:Unobtrusive Ajax和Validation Nuget包已更新,因此jQuery.Migrate不再需要包.