Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript json内容类型为HTML返回错误请求的jquery ajax帖子_Javascript_Jquery_Ajax_Json_Asp.net Mvc 4 - Fatal编程技术网

Javascript json内容类型为HTML返回错误请求的jquery ajax帖子

Javascript json内容类型为HTML返回错误请求的jquery ajax帖子,javascript,jquery,ajax,json,asp.net-mvc-4,Javascript,Jquery,Ajax,Json,Asp.net Mvc 4,我有下面的示例代码,可以在本地开发环境中使用,但当发布到使用HTTPS并使用.NET绑定的javascript和ELMAH进行错误记录的实时环境时,这将不再像预期的那样工作 我得到的不是JSON内容响应,而是一个HTML内容响应,带有responseText“坏请求”和noresponseJSON属性,因此该代码导致javascript错误 有人知道为什么会更改内容类型吗?大概是因为这是一个活的环境,响应代码是400?但我不确定这里发生了什么 控制器: public JsonRe

我有下面的示例代码,可以在本地开发环境中使用,但当发布到使用HTTPS并使用.NET绑定的javascript和ELMAH进行错误记录的实时环境时,这将不再像预期的那样工作

我得到的不是JSON内容响应,而是一个HTML内容响应,带有
responseText
“坏请求”和no
responseJSON
属性,因此该代码导致javascript错误

有人知道为什么会更改内容类型吗?大概是因为这是一个活的环境,响应代码是400?但我不确定这里发生了什么

控制器:

        public JsonResult JsonModelErrorResult()
        {
            Response.StatusCode = 400;
            var errors = ModelState.Values.SelectMany(m => m.Errors);
            return Json(errors);
        }

        [HttpPost]
        public ActionResult GetData()
        {
...
            if (results != null && results.Any())
            {
                return Json(result, JsonRequestBehavior.AllowGet);
            }
            else
            {
                ModelState.AddModelError("SearchResults", "No results found");
                return this.JsonModelErrorResult();
            }
        }
Javascript:

$.ajax("/Controller/GetData/", {
                dataType: "json",
                type: "POST",
                contentType: "application/json"
            })
            .done((result) => {
            })
            .fail((xhr) => {
                setTimeout(() => {
                    this.errors(xhr.responseJSON);
                }, 200);
            })
            .always(() => {
            });

更新:

这是我在Chrome中查看请求响应时的响应标头:

HTTP/1.1 400 Bad Request
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Content-Type: text/html
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 4.0
X-AspNet-Version: 4.0.30319
Persistent-Auth: true
X-Powered-By: ASP.NET
Date: Thu, 03 Jul 2014 12:08:23 GMT
Content-Length: 11
ajax调用返回的值是一个Jquery jqXHR对象,其
responseText
属性为
“Bad Request”
,内容类型为
“text/html”

更新2: 这是my web.config中的自定义错误设置

<customErrors mode="RemoteOnly" defaultRedirect="~/Error">
  <error statusCode="401" redirect="~/Error/NotAuthorised" />
  <error statusCode="403" redirect="~/Error/NotAuthorised" />
  <error statusCode="404" redirect="~/Error/NotFound" />
</customErrors>

测试时,我将模式更改为“关闭”,但这在IIS8的实时环境中不起作用,可能我错过了一些需要更新的内容,以便IIS正确执行此操作,或者
defaultRedirect=“~/Error”>
也应该被删除? 但是增加了线
Response.tryskipiiscustomerors=true

在JsonModelErrorResult中,代码已停止此内容/html错误,返回了“错误请求”一行。

在设置
响应后立即执行。StatusCode
添加此代码行:

Response.TrySkipIisCustomErrors = true;

这会告诉IIS不要截获请求并使用其自己的错误页。

在设置
响应后立即执行。StatusCode
添加这行代码:

Response.TrySkipIisCustomErrors = true;

这会告诉IIS不要截获请求并使用自己的错误页面。

考虑到环境,不确定,但您是否尝试过此响应。Headers.Add('Content-type','text/json');Add('Content-type','application/json');可能是您在ASP.NET或IIS级别遇到问题,并且您的代码(至少是服务器端)正常(这可能解释了内容类型的更改)。返回HTTP 400可能有多种原因,例如请求头太长、查询字符串中的特殊字符或HTTP请求的大小太大。我将检查您发出的HTTP请求,并检查服务器上的事件查看器,以查看框架是否为您记录了错误。告诉我你发现了什么,我对这个很好奇。@Pricey我认为强制内容类型走错了路。你检查过事件查看器了吗?在Ajax调用中返回的实际HTML内容是什么?你能给出准确的回答吗?@Pricey试着看这里:
C:\Windows\System32\LogFiles\HTTPERR
。您在日志文件中看到与400代码对应的任何内容吗?@Pricey在您设置
响应后立即添加这行代码:
Response.tryskipiiscustomerors=true
。这告诉IIS不要截获请求并使用自己的错误页面。让我知道结果。不确定,考虑到环境,但您是否尝试过此响应。Headers.Add('Content-type','text/json');Add('Content-type','application/json');可能是您在ASP.NET或IIS级别遇到问题,并且您的代码(至少是服务器端)正常(这可能解释了内容类型的更改)。返回HTTP 400可能有多种原因,例如请求头太长、查询字符串中的特殊字符或HTTP请求的大小太大。我将检查您发出的HTTP请求,并检查服务器上的事件查看器,以查看框架是否为您记录了错误。告诉我你发现了什么,我对这个很好奇。@Pricey我认为强制内容类型走错了路。你检查过事件查看器了吗?在Ajax调用中返回的实际HTML内容是什么?你能给出准确的回答吗?@Pricey试着看这里:
C:\Windows\System32\LogFiles\HTTPERR
。您在日志文件中看到与400代码对应的任何内容吗?@Pricey在您设置
响应后立即添加这行代码:
Response.tryskipiiscustomerors=true
。这告诉IIS不要截获请求并使用自己的错误页面。让我知道结果。