JSON响应丢失}]

时间:2017-08-25 07:15:20

标签: javascript asp.net json ajax

将.aspx站点从服务器A移动到服务器BI时,发现其中一个页面上的AJAX GET请求未按预期在服务器B上运行。有问题的页面发出三个AJAX GET请求,另外两个请求这三项工作。最后一个请求会获取最大量的数据但它会失败。检查谷歌浏览器中的页面显示状态为200,但查看响应选项卡,我可以看到结束括号']}'缺少JSON数据。同一个呼叫虽然在服务器A上完美运行。两个服务器上的页面都在同一个地方请求相同的信息,服务器A的响应看起来像这样[' [{此处的信息}]'虽然服务器B的响应看起来像这样[{此处的信息'。虽然对于服务器B的响应如果信息足够小就可以工作,但是有一个问题。这让我觉得它是一个字符/数据限制,但在web.config文件中有这样的:

<webServices>
    <jsonSerialization maxJsonLength="50000000"/>
</webServices>

以下是两台服务器的规格以及上一次AJAX GET请求的响应标头图片。

服务器A:

Windows Server 2008 R2 Standard(Service Pack 1)。

IIS 7.5.7600.16385

Successful response from Server A

服务器B:

Windows Server 2012 R2 Datacenter。

IIS 8.5.9600.16384

Failed response from Server B

这也是电话的样子:

var ajax = $.ajax({
    url: "/page.aspx?Action=GetInformation",
    datatype: "json",
    type: "GET",
    data: {
        userID: userID
    }
})

修改

以下是该网站使用的一些c#代码。

获取请求的页面内。

if (Action == "GetMyProjects")
{
    String userID = Request.QueryString["userID"];
    List<Project> projectList = SQL.getMyProjects(userID);

    HTMLUtills.sendAsJSON(projectList, Context);
}

SQL.cs

public static List<Project> getMyProjects(String _userId)
{
    List<Project> myProjects = new List<Project>();

    int proNum = 0;
    String proDes = "";
    int busID = 0;
    String busName = "";
    int conID = 0;
    String conTitle = "";
    String confName = "";
    String conlName = "";
    String proStatus = "";

    ParameterCollection parameterCollection = parameterCollection = new ParameterCollection();
    parameterCollection.Add("@userID", Convert.ToString(_userId));
    SqlDataReader sqlDataReader = (SqlDataReader)runStoredProcedure(SQL.runspType.Reader, "ALL_Projects_For_You", parameterCollection, "EACRMDBConnectionStringArmData02");

    if (sqlDataReader.HasRows)
    {
        while (sqlDataReader.Read())
        {
            proNum = 0;
            proDes = "";
            busID = 0;
            busName = "";
            conID = 0;
            conTitle = "";
            confName = "";
            conlName = "";
            proStatus = "";

            if (!sqlDataReader.IsDBNull(4)) { proNum = sqlDataReader.GetInt32(4); } else { }
            if (!sqlDataReader.IsDBNull(5)) { proDes = sqlDataReader.GetString(5); } else { }
            if (!sqlDataReader.IsDBNull(6)) { busID = sqlDataReader.GetInt32(6); } else { }
            if (!sqlDataReader.IsDBNull(7)) { busName = sqlDataReader.GetString(7); } else { }
            if (!sqlDataReader.IsDBNull(8)) { conID = sqlDataReader.GetInt32(8); } else { }
            if (!sqlDataReader.IsDBNull(9)) { conTitle = sqlDataReader.GetString(9); } else { }
            if (!sqlDataReader.IsDBNull(10)) { confName = sqlDataReader.GetString(10); } else { }
            if (!sqlDataReader.IsDBNull(11)) { conlName = sqlDataReader.GetString(11); } else { }
            if (!sqlDataReader.IsDBNull(13)) { proStatus = sqlDataReader.GetString(13); } else { }

            Project tempProject = new Project(proNum, proDes, busID, busName, conID, conTitle, confName, conlName, proStatus);
            myProjects.Add(tempProject);
        }
    }

    sqlDataReader.Close();
    return myProjects;
}

HTMLUtills.cs

public static void sendAsJSON(Object _object, HttpContext _httpContext)
{
    string json = getAsJSON(_object);

    _httpContext.Response.Clear();
    _httpContext.Response.ContentType = "application/json";
    _httpContext.Response.AddHeader("content-disposition", "attachment; filename=export.json");
    _httpContext.Response.AddHeader("content-length", json.Length.ToString());
    _httpContext.Response.Flush();
    _httpContext.Response.Write(json);

    _httpContext.Response.End();
    _httpContext.Response.Close();
}

0 个答案:

没有答案