C# FireFox和IE9尝试下载或显示json响应,而不是让javascript解析它

C# FireFox和IE9尝试下载或显示json响应,而不是让javascript解析它,c#,jquery,ajax,asp.net-mvc-3,cross-browser,C#,Jquery,Ajax,Asp.net Mvc 3,Cross Browser,更新 我的问题是我使用event.preventDefault而不是returnfalse来阻止表单正常发布。FF和IE不喜欢这样,所以用那句话打断了JS。我删除了它,并在最后附加了returnfalse,这就解决了问题。感谢Darin Dimitrov提供的大量清单 原始问题 我使用ASP.NETMVC3和jQueryAjax将json数据发布到服务器并接收响应。然而,当我使用Chrome时,它会正常读取json响应,更新我想要的div,等等。但是,使用IE和FF它不起作用。他们只阅读响应,并

更新

我的问题是我使用event.preventDefault而不是returnfalse来阻止表单正常发布。FF和IE不喜欢这样,所以用那句话打断了JS。我删除了它,并在最后附加了returnfalse,这就解决了问题。感谢Darin Dimitrov提供的大量清单

原始问题

我使用ASP.NETMVC3和jQueryAjax将json数据发布到服务器并接收响应。然而,当我使用Chrome时,它会正常读取json响应,更新我想要的div,等等。但是,使用IE和FF它不起作用。他们只阅读响应,并在页面上仅显示响应

我看到其他一些线程提到将mime类型定义为text/plain。这改变了以前提示用户下载json响应的行为

这是制作帖子的javascript:

 $.ajax({
        url: $("#formRegister").attr("action"),
        type: 'POST',
        data: JSON.stringify(user),
        dataType: 'json',
        contentType: 'application/json, charset=utf-8',
        traditional: true,
        success: function (data) {
            alertMessage(data.Message);

        },
        error: function () {

        }
    });
这是接收调用并返回JsonResponse的ActionMethod:

[HttpPost]
    public JsonResult Register(UserRegisterPackage package)
    {
        ClientAlert alert = new ClientAlert();
        if (package.Password != null)
        {       
            //bool success = Removed for simplicity's sake.
            bool success = true;
            if (success)
            {                    
                alert.Message = "Success!";                    
            }
            else
            {                    
                alert.Message = "Failed to register";                    
            }
        }
        else
        {                
            alert.Message = "You need to enter a password!";                
        }
        return Json(alert, "text/plain");
    }
正如我所说,当内容类型定义为text/plain时,浏览器仅显示响应,而当未定义时,它会提示用户下载json响应

对于FF,我似乎得到了一个关于以下方面的错误:

"event is not defined
event.preventDefault(); "
这可能与错误有关。。但是我需要阻止表单正常发布。在FF或IE中是否有不同的做法


有什么想法吗?

我在使用较旧版本的jQuery.Validate时遇到了这种情况,这与设置错误数据类型的错误有关


请确保您使用的是最新版本的jQuery。validate

我在使用较旧版本的jQuery时遇到了这种情况。validate与设置错误数据类型的错误有关

确保您使用的是jQuery.validate的最新版本

返回Jsonalert,文本/普通

通常Jsonalert应该足够了。你能试试application/json吗;字符集=utf-8作为内容类型

返回Jsonalert,文本/普通

通常Jsonalert应该足够了。你能试试application/json吗;charset=utf-8作为内容类型?

要尝试的内容:

如果此$.ajax调用是在某个锚的.click或.submit处理程序中进行的,请确保返回false;最后,取消默认行为并留出时间执行AJAX请求。你使用的attr“动作”让我相信情况就是这样。 删除传统的:true参数,您将发送一个JSON请求=>它与此无关。 确保页面上没有其他javascript错误,因为它们可能会停止js执行并进入正常表单提交 如果要返回JSON,请从服务器中删除所有文本/纯文本。这样做是没有意义的,你的问题肯定不是从哪里来的。只需使用return-Jsonalert;。 因此,如果您正在Ajaxing表单,您甚至不需要任何JSON请求,只需:

$('#formRegister').submit(function() {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function (data) {
            alertMessage(data.Message);
        },
        error: function () {

        }
    });
    return false;
});
如果您打算发送JSON请求,那么您的代码看起来很好,jsu请确保没有其他JS错误。

需要尝试的事项:

如果此$.ajax调用是在某个锚的.click或.submit处理程序中进行的,请确保返回false;最后,取消默认行为并留出时间执行AJAX请求。你使用的attr“动作”让我相信情况就是这样。 删除传统的:true参数,您将发送一个JSON请求=>它与此无关。 确保页面上没有其他javascript错误,因为它们可能会停止js执行并进入正常表单提交 如果要返回JSON,请从服务器中删除所有文本/纯文本。这样做是没有意义的,你的问题肯定不是从哪里来的。只需使用return-Jsonalert;。 因此,如果您正在Ajaxing表单,您甚至不需要任何JSON请求,只需:

$('#formRegister').submit(function() {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function (data) {
            alertMessage(data.Message);
        },
        error: function () {

        }
    });
    return false;
});

如果您打算发送JSON请求,那么您的代码看起来很好,jsu确保没有其他JS错误。

我遇到了同样的问题,JsonRequestBehavior.AllowGet在chrome上工作得很好,但在IE上失败。我尝试了许多格式,但下面是唯一一个适用于IE的格式

return Json(additionalData, "text/html")

我遇到了同样的问题,JsonRequestBehavior.AllowGet在chrome上工作得很好,但在IE上失败了。我尝试了许多格式,但下面是唯一一种适用于IE的格式

return Json(additionalData, "text/html")

您是否尝试过定义不同的内容类型,例如“text/json”?与未定义内容类型的结果相同;浏览器尝试下载响应。您是否尝试定义不同的内容类型,如“text/json”?与未定义内容类型的结果相同;浏览器尝试下载响应。我尝试了您之前的建议,但FF和IE提示下载响应。我尝试了您之前的建议,但FF和IE提示下载响应。我如何检查?我使用jQuery的最新版本。我需要属性tr
传统:正确,因为ASP.NET无法识别其他响应。我不知道这是否重要,我该怎么检查?我使用jQuery的最新版本。我需要使用traditional属性:true,因为ASP.NET无法识别响应。不过,我不知道这是否重要。显然,传统的说法是:由于一个bug,需要true。谢谢,我把这个答案加入书签,即使它不能解决我的问题。我现在就试试。event.preventDefault在FF或IE中不起作用。在所有浏览器中都返回false。所以JS突破了这条线,除了在Chrome中,浏览器接受了这条线。显然,传统的:true是因为一个bug而需要的。谢谢,我把这个答案加入书签,即使它不能解决我的问题。我现在就试试。event.preventDefault在FF或IE中不起作用。在所有浏览器中都返回false。所以JS突破了这条线,除了在Chrome中浏览器接受了这条线。