架构:struts2+JQuery
需求:就是前台请求后台,后台查询数据库,将数据转换成json格式,使用struts2框架赋值给action内的变量jsonStr,前台通过 response.jsonStr 得到 json字符串,接着做相关操作。
前端代码:
jQuery.ajax({
url: 'business/xxxx!xxxx.action',
data: 'id='+id,
type: 'POST',
dataType:"json",
beforeSend: function() {
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);//前台打出:internal server error
alert(request.status);//前台打出: 500
alert(request.readyState);//前台打出:4
alert(textStatus);//前台打出: 空字符串
},
success: function(response) {
var jsonObj = eval("("+response.jsonStr+")");
}
});
后端关键代码(省略查数据库的部分,很简单,就是将转换好的json字符串赋值给Action里的某个变量):
this.setJsonStr(jsonStr);
问题来了,
当jsonStr数据内的某个属性值比较大的时候,在这个案例里是超出了3000个字符(一个中文算三个字符),
而且含有大量中文时,前端会报错,注意,是“数据大“+”大量中文“这两个条件同时满足才会出现该问题。
总之,这种情况下就前台就会打出internal server error ,错误码是500。
按理说3000多个字符并不大,并且所谓的大量中文,算了下大概占1800个字符吧(乘以3之后),
目前还不知道根本原因是什么。有知道的欢迎留言~
解决方案:
前端-->ajax请求的dataType改为: ”text",
获取json对象改为:var jsonObj = eval("("+response+")");
后端--> 把方法的返回值从String改为 void,简单的说就是不用struts2自带的传值方式,关键代码如下:
this.getServletResponse().setContentType("text/html;charset=UTF-8");
super.getServletResponse().getWriter().write(jsonStr);
当然规范的写法最后是要关掉/释放 PrintWriter 的。
分享到:
相关推荐
`error`通常是服务器返回的错误信息字符串。 除了`error`事件,还有一些其他参数可以帮助我们调试Ajax请求: 1. **`beforeSend`**:在发送请求之前调用,可以用来预处理xhr对象,例如设置自定义头信息。 2. **`...
`error` 回调函数接收三个参数:`jqXHR` 对象、`textStatus` 字符串和 `errorThrown` 错误对象。`jqXHR` 是一个基于 Promise 的对象,具有 `readyState`、`status`、`statusText` 和 `responseText` 等属性,这些...
然后,通过`FormData`对象将这个对象序列化为JSON字符串,并附加到文件一起发送。`FormData`对象用于存储键值对,特别适合于上传文件。这里的`contentType`和`processData`设置为`false`是为了防止jQuery尝试处理或...
9. data:发送到服务器的数据,可以是对象、字符串等,GET请求会将数据附加到URL上。 10. dataType:预期服务器返回的数据类型,例如"xml"、"html"、"json"、"jsonp"等。 11. error:请求失败时调用的回调函数,有三...
- **5xx系列**:表示服务器错误状态码,如500 Internal Server Error(服务器内部错误)、501 Not Implemented(功能未实现)。 这些状态码有助于客户端了解请求的处理情况,并采取相应的后续操作。 #### 3. 如何...
- **500 Internal Server Error**: 服务器内部错误。 - **503 Service Unavailable**: 服务器暂时不可用。 #### 四十一、协议以及默认的端口号 - **HTTP**: 默认端口80。 - **HTTPS**: 默认端口443。 - **FTP**: ...
- **500 Internal Server Error**: 服务器遇到了不可预期的情况,无法完成请求。 - **503 Service Unavailable**: 服务器目前无法使用(由于超载或停机维护)。 - **403 Forbidden**: 请求被禁止。 - **404 Not ...
-Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -MenuButton, LinkButton, Button, LinkButtonField的...
-Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -MenuButton, LinkButton, Button, LinkButtonField的...
- **out**:输出流对象,用于输出内容到客户端。 - **session**:用户会话对象。 - **application**:应用程序范围对象。 - **config**:Servlet配置对象。 - **exception**:异常对象,在错误处理页面中可用。 ###...
- **JSON**:JavaScript Object Notation,一种轻量级的数据交换格式,只支持服务器到客户端的单向数据传递。 - **JSONP**:JSON with Padding,一种跨域数据交互协议,允许服务器将数据封装在客户端提供的回调函数...
- **状态码**: 200 OK、404 Not Found、500 Internal Server Error等。 **2. 安全** - **HTTPS**: 通过SSL/TLS加密传输数据。 - **CORS**: 跨域资源共享。 - **CSRF**: 跨站请求伪造。 **3. 正则表达式** - **...