升级到jQuery 1.9后MVC 4 Internet项目JSON错误

时间:2013-01-22 07:03:46

标签: jquery asp.net-mvc asp.net-mvc-4

在Visual Studio 2012中,我使用Internet模板创建了一个MVC 4项目,然后当我将jQuery更新到当前版本的1.9时,在尝试登录生成的Web应用程序时出现jQuery错误。此错误仅发生在IE(我正在运行IE 10)中,并且似乎是由于不同浏览器中JSON解析器的差异。

所以我需要解决的是,我们如何使用MVC 4 Internet模板,但仍然能够更新到jQuery 1.9。

以下是重现错误的步骤;

1:使用Internet项目模板创建一个新的MVC 4项目 - 模板使用jQuery 1.7.1.1并且工作正常,我可以注册为新用户并登录等。
2:现在将jQuery,jQuery验证和jQuery UI更新到最新版本(目前分别为1.9.0,1.10.0和1.10.0)。
3:运行应用并切换到登录页面。此页面在以下jquery.unobtrusive-ajax.js代码中生成错误;

    $("a[data-ajax=true]").live("click", function (evt) {
    evt.preventDefault();
    asyncRequest(this, {
        url: this.href,
        type: "GET",
        data: []
    });
});


4:好的,没问题,在jQuery 1.9中删除了live()所以我包含了jQuery迁移脚本jquery-migrate-1.0.0.js 5:我重新运行应用程序,现在当我在jquery-1.9.0.js中登录解析JSON时出现错误。错误发生在parseJSON方法中;

    parseJSON: function( data ) {
    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( data );
    }...

错误是由'undefined'传递给parseJSON引起的,因此在IE window.JSON.parse引发错误,其他浏览器不会引发错误。

所以问题是,在IE上使用jQuery 1.9来运行MVC 4 Internet模板会有什么可接受的解决方法吗?

顺便提一下,这是来自jQuery 1.8的部分parseJSON方法,它解释了之前没有错误的原因。

    parseJSON: function( data ) {
    if ( !data || typeof data !== "string") {
        return null;
    }...

3 个答案:

答案 0 :(得分:1)

JQuery已被弃用了许多功能。您可能对此感兴趣:

https://github.com/jquery/jquery-migrate/#readme

答案 1 :(得分:1)

答案可能在此链接中。 http://forum.jquery.com/topic/parsejson-in-1-9-0-is-different-from-earlier-versions 似乎MVC团队正计划在下一个版本中修复它。我希望这会有所帮助。

答案 2 :(得分:0)

使用ASP.NET和Web Tools 2012.2发行版(从http://www.asp.net/vnext下载),应使用更新的jquery.validate.unobtrusive.js修复它。