c# - FireFox 和 IE9 尝试下载或显示 json-response 而不是让 javascript 解析它

标签 c# jquery ajax asp.net-mvc-3 cross-browser

更新

我的问题是我使用 event.preventDefault() 而不是 return false 来阻止表单正常发布。 FF 和 IE 不喜欢那样并通过那条线破坏了 JS。我删除了它并在最后附加了 return false ,这解决了问题。感谢 Darin Dimitrov 提供的详尽 list 。

原始问题

我正在使用 ASP.NET MVC3 和 jquery ajax 将 json 数据发布到服务器并接收响应。但是,当我使用 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 中有不同的做法吗?

有什么想法吗?

最佳答案

要尝试的事情:

  1. 如果这$.ajax.click 内部进行调用或 .submit一些 anchor 的处理程序或 <form>确保你return false;最后取消默认行为并留出时间让您的 AJAX 请求执行。 attr('action')你正在使用的东西让我相信情况就是这样。
  2. 删除 traditional: true参数,你正在发送一个 JSON 请求 => 它是无关紧要的。
  3. 确保您的页面上没有其他一些 javascript 错误,因为它们可能会停止 js 执行并继续正常提交表单
  4. 删除所有text/plain如果您打算返回 JSON,请从您的服务器获取。做这样的事情是没有意义的,这绝对不是你的问题所在。只需使用 return Json(alert); .

因此,如果您使用 AJAX 化表单,您甚至不需要任何 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 请求,那么您的代码似乎没问题,请确保没有其他 JS 错误。

关于c# - FireFox 和 IE9 尝试下载或显示 json-response 而不是让 javascript 解析它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6790346/

相关文章:

c# - 一旦显示 BarcodePickerController,通过 MonoTouch 使用 RedLaser SDK 就会崩溃

jquery - Toastr 没有出现在 Laravel 5.4 中

javascript - 如何将 blob 文件从 Javascript 传递到 ASP.net 中的服务器代码

javascript - 使用 $.ajax 提交表单

html - 如何在 html 中实现自定义自动完成列表?

c# - LINQ to SQL 和 Dotnetnuke 是不错的选择还是我们应该坚持使用 3 层架构?

c# - 这个时间值是什么格式?

c# - ASP.NET 网站调试速度极慢,有数千个临时 ASP.NET 文件

javascript - 如何使用javascript动态更改cloud-zoom Zoom Image 1.0.2

javascript - 通过更改输入值禁用按钮