gpt4 book ai didi

javascript - Jquery、ajax 和 JSON : Parsing GET response fails, 但只是有时?

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:22 25 4
gpt4 key购买 nike

我正在使用 jquery 进行 ajax 调用,它返回一个 json 数组,并且在某些情况下工作正常。然而,在其他情况下,浏览器(ff 和 IE11)无法解析响应。我将脚本包含在 .jsp 文件中,如下所示:

<script type="text/javascript" charset="utf-8" src="../scripts/test.js"></script>

这是 json 的结构,如 java 控制台中的 servlet 所示:

[{"key":"...","type":"...","content":"..."},
{"key":"...","type":"...","content":"..."},
...]

我的请求看起来像这样:

var url = document.location.origin + "/Servlet",
searchText = $("input[name=search]").val(),
types = getOptions();


$.ajaxSetup({
type: "GET",
url: url,
data: {"operation": "search", "searchText": searchText, "types": types, "resultNumber": 200},
datatype: "json",
success: function(result,status,xhr)
{
showResults(result);
},
cache: false
});

$.ajax();

我的用于创建 JSON 数组的 java 方法:

private JSONArray parseJSON (ArrayList<ResultObject> aResultList) throws JSONException
{
JSONArray resultJSONArray = new JSONArray();

for (ResultObject resultObject : aResultList)
{
JSONObject jsonObject = new JSONObject();
HashMap<String,String> fields = resultObject.getFields();

for (Map.Entry<String, String> entry : fields.entrySet())
{
jsonObject.put(entry.getKey(), entry.getValue());
}
resultJSONArray.put(jsonObject);
}
return resultJSONArray;
}

Servlet 响应如下所示:

protected void doGet(HttpServletRequest aRequest, HttpServletResponse aResponse) 
throws ServletException, IOException
{
QueryObject queryObject = new QueryObject();
queryObject.setSearchText(aRequest.getParameter("searchText"));
String[] types = aRequest.getParameterValues("types[]");
queryObject.setTypes(types);
queryObject.setResultNumber(Integer.parseInt(aRequest.getParameter("resultNumber")));

JSONArray results = indexManager.doSearch(queryObject);

System.out.println(results.toString());

aResponse.getWriter().write(results.toString());

aResponse.setContentType("application/json");
// aResponse.setCharacterEncoding("UTF-8");
PrintWriter out = aResponse.getWriter();
out.flush();
}

我用 jquery 解析它,如下所示:

function showResults (resultList)
{
$.each(resultList, function(i, item)
{
console.log(item.key);
});
}

调试显示,有时返回的 JSONarray 不会自动解析为 JSON,而是保留为字符串,这就是 $.each(..) 失败的原因。我无法确定为什么 jquery 解析它时出现问题,因为它没有给我任何错误消息。然而,使用 JSON.parse() 手动解析它告诉我它似乎无效。起初它使用 $.get(...) 执行请求,这在 FF 中运行良好,但在 IE 中则不行(缓存问题)。我认为这是德语特殊字符(元音变音)的问题,但事实并非如此。当 jsonarray 较大时(约 50 个对象或更多),这种情况似乎总是会发生。不幸的是,我无法在这里发布示例 json,因为它包含敏感数据。

我浪费了几个小时来解决这个问题,所以请有人知道这里出了什么问题吗?有没有任何工具可以帮助我验证我的 json 并告诉我它到底为什么无效?或者问题可能是由其他原因造成的?谢谢。

最佳答案

我会发表评论,但因为我还没有 50 名代表...

您可以使用此工具检查您的 JSON 是否有效 https://jsonlint.com/关于 JSON 太大,我不会打赌,JSON 数据 block 或任何字段的大小没有固定限制(为 jvm 分配了适量的堆内存)。各种浏览器的 JavaScript 实现可以处理的 JSON 量是有限的(例如,根据我的经验,大约 40MB)。

关于javascript - Jquery、ajax 和 JSON : Parsing GET response fails, 但只是有时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com