C# FireFox和IE9尝试下载或显示json响应,而不是让javascript解析它
更新 我的问题是我使用event.preventDefault而不是returnfalse来阻止表单正常发布。FF和IE不喜欢这样,所以用那句话打断了JS。我删除了它,并在最后附加了returnfalse,这就解决了问题。感谢Darin Dimitrov提供的大量清单 原始问题 我使用ASP.NETMVC3和jQueryAjax将json数据发布到服务器并接收响应。然而,当我使用Chrome时,它会正常读取json响应,更新我想要的div,等等。但是,使用IE和FF它不起作用。他们只阅读响应,并在页面上仅显示响应 我看到其他一些线程提到将mime类型定义为text/plain。这改变了以前提示用户下载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它不起作用。他们只阅读响应,并
$.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中浏览器接受了这条线。