我使用 AJAX 检索外部系统的 JSONP 响应,但是响应被截断(由于缺乏更好的工作)。我的前端页面将对 URL 进行 AJAX 调用,我的系统将生成一个响应,该响应将添加到 PrintWriter 然后刷新 Printwriter。但是返回的内容并不完整。
PrintWriter pw = response.getWriter();
pw.write(callBackFn);
pw.write("(" + requestsJSON + ")");
pw.flush();
pw.close();
请注意,响应大约有 120 000 个字符。我试图寻找切断的原因,但没有找到类似的东西。
编辑
public ActionForward getJSON(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
List requestList = RequestUtil.convertRequestsHashMapToRequestsList((HashMap)request.getSession().getServletContext().getAttribute(Constants.REQUESTS_CACHE_MAP));
String requestsJSON = "";
if (!requestList.isEmpty()) {
Requests requestObj = (Requests) requestList.get(0);
requestsJSON += "{\"key\":\"" + requestObj.getRequestId() + "\",\"value\":\"" + requestObj.getSubject() + "\"}";
for (int i = 1; i < requestList.size(); i++) {
requestObj = (Requests) requestList.get(i);
requestsJSON += ",{\"key\":\"" + requestObj.getRequestId() + "\",\"value\":\"" + requestObj.getSubject() + "\"}";
}
}
requestsJSON = "{\"values\":["+requestsJSON+"]}";
String callBackFn = (String) request.getParameter("callback");
System.out.println("#### Character length: " + (callBackFn + "(" + requestsJSON + ")").length());
PrintWriter pw = response.getWriter();
pw.write(callBackFn);
pw.write("(" + requestsJSON + ")");
pw.flush();
pw.close();
return null;
}
注意:我添加了上述方法的系统非常陈旧且未维护。它是使用 AppFuse 1.8.2(使用 Spring 2)创建的,并且运行的是 Java 1.4。不幸的是,该系统编写得不是很好,因此无法选择更新到更高版本的 Java。
至于方法返回的返回内容(JSONP String)如何使用,无关紧要。外部系统正在调用链接到返回字符串的此方法的 URL。