我使用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,该方法返回字符串。