request.getReader().readLine()取不到值

寒芒菊紧-Husky 2018-05-27 02:11:29
今天通过ajax通过data传输json数据格式的数据时,发现readLine()方法只执行了一次,而且取到的值为空


jsp页面部分代码:

//下面的代码中的url经测试,能访问servlet到,而且其中的“optionType”参数也能在servlet读取到值

function onAfterCusEdit(rowIndex,rowData,changes){
//重新拼接json字符串,使之成为一个数组
if("{}"!=JSON.stringify(changes)){
var newJsonArray = "{'cus_id':'"+rowData.cus_id+"','data':'"+JSON.stringify(changes)+"'}";
alert(newJsonArray);
alert(optionType);
// 通过jQuery的ajax方法传递修改好的数据
$.ajax({
type:"POST",
url:"${projectName}/ManagerOpCusServlet?optionType="+optionType,
data:newJsonArray,
error:function(){
alert("无法请求指定的servlet");
}
});
}else{
$('#'+idType+'_table').datagrid('reload');
}
}

servlet核心代码:

// 获取“用户管理”表单的操作类型
String optionType = request.getParameter("optionType");
// 将获取optionType进行转码
//optionType = URLDecoder.decode(optionType, "UTF-8");
optionType=new String(optionType.getBytes("ISO-8859-1"),"UTF-8");
// 创建对应的service对象
ManagerService ms = new ManagerServiceImp();
// 设定影响行数
int lineNumber = 0;
if ("新增".equals(optionType)) {
String jsonString = JsonFormatC.getJsonString(request.getReader());
System.out.println(jsonString);
Customer cus = JSON.parseObject(jsonString,Customer.class);
System.out.println(cus.toString());
//调用增加客户的方法
lineNumber = ms.addOneCustomer(cus);
//显示影响数据库的行数
DataBaseUtils.showDB_LN(lineNumber);
//将影响行数返回添加界面,告诉用户有没有返回成功
PrintWriter pw = response.getWriter();

//返回界面数据
pw.print(lineNumber);
//清空数据流,确保数据输出
pw.flush();
//关闭输出流
pw.close();


工具类代码:


public class JsonFormatC {

public static String getJsonString(BufferedReader reader){
//接受请求数据
StringBuffer json = new StringBuffer();
//获取请求头对象,页面信息存放在请求头里面
//BufferedReader reader = request.getReader();
String line = null;
//循环调用readLine方法将reader中的每条不为null,类型为“String”数据放入json中
try {
while(null!=(line=reader.readLine())){
json.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将数据存完后再将StringBuffer转为String类型
//String jsonCustomer = json.toString();
return json.toString();
}
}
...全文
7115 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
寒芒菊紧-Husky 2018-05-27
  • 打赏
  • 举报
回复 2
解决了,经测试,如果要同时使用url和data传值,那么就必须先BufferReader.readLine()读取data中的值,然后再通过HttpServletRequest.getParameter()读取url中的参数值,如果先读取了url中的参数值,那么将不能通过BufferReader.readLine()读取data中的值,具体原因是什么,还不是很清楚,如果有知情的大佬,请告知!

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧