ajax Json响应收到的是HTML而不是json

时间:2015-07-30 04:06:58

标签: javascript jquery ajax json

我有一个在我的localhost上运行正常的应用程序。但是一旦我从另一台机器上访问它,它就无法按预期工作。

我有以下ajax请求:

$.ajax({
    type: "POST",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    url: rootUrl + 'ro/createRO',
    data: JSON.stringify(postdata),
    success: function (RoCreateResult) {
        /
        if (allRowsSelected) {
            window.location = rootUrl + "ro/RoPendingSummary?RoNumber=" + RoCreateResult.roNumber;
        } else {
            _AE.successAlert("RO " + RoCreateResult.roNumber + " created successfully");
            refreshRoPendingGrid();
        }
    },
    error: function (xhr, status, error) {

        var errobj = eval("(" + xhr.responseText + ")");
        _AE.errorAlert(errobj.message);
    }
});

这在成功方面运作良好。 但是在失败时,我得到的xhr.responseText是json格式(这是预期的)但是当从另一台机器访问时,它给出了HTML格式。这种行为的可能原因是什么?

预期的JSON是

message:"This operation cannot be completed because it will result in budget overshoot for the following estimates"

The HTML that it returns is:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0       Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>500 - Internal server error.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-    family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-        top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>500 - Internal server error.</h2>
  <h3>There is a problem with the resource you are looking for, and it     cannot be displayed.</h3>
 </fieldset></div>
</div>
</body>
</html>

生成异常的代码

public async static Task<RoCreateResult> CreateRO(int[] estItemIds)
    {

        using (DDb db = new DDb())
        {
            RoCreateResult roData = await db.Database.SqlQuery<RoCreateResult>(
                "s_roCreate")
                .FirstOrDefaultAsync();

            return roData;
        }
    }

我尝试的事情: 试图使用jsonp而不是json - 没有用。 2.安装包Microsoft.AspNet.WebApi.Cors 5.2.3并添加HTTP配置以启用CORS。 - 失败。

还有什么我可以尝试的吗?

1 个答案:

答案 0 :(得分:1)

返回给您的HTML说

  

500 - 内部服务器错误。

  

您正在查找的资源存在问题,无法显示。

 

这意味着,您尝试访问的请求在服务器端存在错误(可能是抛出异常的代码)。您需要使用try..catch将代码包装在服务器端语言中,并将错误记录到db或以json格式返回错误。即消息:您从代码中捕获的错误。这与您的javascript代码无关。