在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;
}...
答案 0 :(得分:1)
JQuery已被弃用了许多功能。您可能对此感兴趣:
答案 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修复它。