【发布时间】:2013-01-11 21:45:17
【问题描述】:
更新
我的问题是我使用 event.preventDefault() 而不是 return false 来阻止表单正常发布。 FF 和 IE 不喜欢这样,并通过那条线打破了 JS。我删除了它并在最后附加了 return false ,这解决了问题。感谢 Darin Dimitrov 提供的详尽清单。
原始问题
我正在使用 ASP.NET MVC3 和 jquery ajax 将 json-data 发布到服务器并接收响应。但是,当我使用 Chrome 时,它会正常读取 json-response,更新我想要的 div 等。但使用 IE 和 FF 它不起作用。他们只阅读响应并仅在页面上显示。
我看到其他一些线程提到将 mime 类型定义为“text/plain”。这改变了之前提示用户下载 json-response 的行为。
这是发帖的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-response。
对于 FF,我似乎得到了一个错误:
"event is not defined
event.preventDefault(); "
这可能与错误有关..但我需要阻止表单正常发布。这在 FF 或 IE 中的处理方式不同吗?
有什么想法吗?
【问题讨论】:
-
您是否尝试过定义不同的内容类型,例如“text/json”?
-
给出与不定义内容类型相同的结果;浏览器尝试下载响应。
标签: c# jquery ajax asp.net-mvc-3 cross-browser