【问题标题】:Problem with JSON Response from ASP.NET MVC in Some Browsers某些浏览器中来自 ASP.NET MVC 的 JSON 响应问题
【发布时间】:2010-10-08 21:07:06
【问题描述】:

我正在使用 jQuery 的表单插件(如 this one 等许多线程中所建议的那样)将 Ajax 发布到 .NET MVC 控制器并使用我返回的 JSON。它在 Chrome 中运行良好,但在其他一些浏览器(包括 Firefox 3)中,表单提交会导致“保存或打开此文件”对话框。 JavaScript 看起来像:

var options = {
            dataType: "json",
            clearForm: true,
            beforeSubmit: hideUpdateField,
            success: handleNewsPostSuccess
        };

        $('div#Updates form').ajaxForm(options);

控制器响应的内容是:

Object response = new { html = RenderPartialViewToString("DisplayNewsPost", np), newpoints = points.ToString() };
return Json(response, "application/json; charset=utf-8");

我错过了什么?就像提交事件没有附加到 Firefox 和其他有问题的浏览器中一样。我尝试使用 ajaxSubmit 进行自己的提交操作,而不是在其中返回 false,但没有区别。

【问题讨论】:

    标签: jquery json asp.net-mvc-2 forms


    【解决方案1】:

    使用不同的 MIME 类型进行响应;简单的text/plain 应该可以工作。我相信 FF 对未知的application/* MIME 类型感到困惑,因此假设它是一些特定于应用程序的数据,最好作为单独的文件下载。

    或者,您可以试验Content-Disposition 标头,将其设置为inline。 Firefox 应该遵守它,但 IIRC 在 IE 上可能会出现一些问题。

    【讨论】:

    • 我认为这是 FireFox 实现中的一个错误,但您使用的是您所拥有的,而不是您想要的。
    【解决方案2】:

    我不确定您是否遇到同样的问题,但this question and answers 可能会帮助您

    【讨论】:

      【解决方案3】:

      Json 方法已经设置了正确的内容类型,所以你不需要重复它:

      return Json(response);
      

      但是从您描述的行为(另存为对话框)来看,我怀疑该表单实际上不是使用 AJAX 发布的,而是使用普通的 POST 发布的。这可能是因为当您应用 .ajaxForm 函数时 DOM 尚未准备好。确保您在 $(document).ready 中对表单进行了 ajaxifying:

      $(function() {
          var options = {
              dataType: "json",
              clearForm: true,
              beforeSubmit: hideUpdateField,
              success: handleNewsPostSuccess
          };
          $('div#Updates form').ajaxForm(options);
      });
      

      此外,如果在您的 handleNewsPostSuccess 回调中您在 DOM 中重新创建表单,ajaxForm 可能不再适用于它,并且您第二次尝试提交它将执行正常的 POST。

      【讨论】:

        猜你喜欢
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-04
        • 2017-01-25
        • 2013-11-23
        • 2017-06-25
        相关资源
        最近更新 更多