求救!关于ajax传递内容到action,数据不完整

凉岑玉 2011-08-11 05:50:36
我通过fckeditor来编辑内容·然后通过ajax来发送请求给action,在ajax的函数里接收到的数据是包含有html标签的,当我发送到后台的action并打印出来的时候发现只打印了一个起始的<p>标签,存到数据库的时候也是只存储一个<p>标签·经仔细观察,发现只要编辑的数据中包含空格的话就必定会造成这种情况··百思不得其解··现贴出代码,忘高手们点拨一二··

AJAX的方法

function addComment() {
//以下是获取fckeditor的值
var fck=FCKeditorAPI.GetInstance("u_comment_a.commentContent").GetXHTML(true);
var userId=document.getElementById("userId").value;
var articleId=document.getElementById("articleId").value;

//fck=encodeURI(encodeURI(fck));//转码

alert("用户Id:"+userId);
alert("文章Id:"+articleId);
alert("评论内容:"+fck);

var xhr=new createXmlHttpRequest();//第一步,获取XHR对象
xhr.onreadystatechange=function (){//第二部,写监听函数
if (xhr.readyState == 4) {//条件判定
if (xhr.status == 200||xhr.status == 304) {
alert("评论成功!");
location.reload() ;
}
}
}

xhr.open("post","UserComment!addUsercommentarticle",true);//链接请求
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")//设置一下请求头
xhr.send("u_comment_a.commentContent="+fck+"&users.userId="+userId+"&article.articleId="+articleId);//发送
//return false;
}

action接收数据并处理的方法:

/**
* 添加一条评论的方法
* @return
*/
public void addUsercommentarticle() {
System.out.println(article.getArticleId()+"--------------------articleId--------------------");
System.out.println(users.getUserId()+"--------------------userId--------------------");
//解码
try {
u_comment_a.setCommentContent(java.net.URLDecoder.decode(u_comment_a.getCommentContent(), "UTF-8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
System.out.println(u_comment_a.getCommentContent()+"--------------------u_comment_a------------------------");

try {
users = UserManagerBean.getUserById(users.getUserId());
article = ArticleManagerBean.getArticleById(article.getArticleId());
//每当评论一次就添加一次被评论的次数
article.setCommentCount(article.getCommentCount()+1);
//提交更新
ArticleManagerBean.updateArticle(article);
//再获取一次
// article = ArticleManagerBean.getArticleById(article.getArticleId());
System.out.println(article.getCommentCount()+"====================================");//打印评论次数看看
//设置评论所属文章及评论者
u_comment_a.setArticle(article);
u_comment_a.setUsers(users);
} catch (Exception e) {
e.printStackTrace();
}
UserCommentArticleManagerBean.addU_A(u_comment_a);
//return "commentSuccess";
}

以下是后台控制台打印出的结果

98--------------------articleId--------------------
9--------------------userId--------------------
<p>--------------------u_comment_a------------------------
...全文
92 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
你好毒你好毒 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 alexandertech 的回复:]
xhr.send("u_comment_a.commentContent="+fck+"&users.userId="+userId+"&article.articleId="+articleId);

这种方法只适合拼接简单的字符串,不宜拼接带格式字符的复杂文本
建议传递Json
[/Quote]

好建议
阳明 to life 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cenhuineng 的回复:]

现在初步估计是由于传递的参数里有带'&'符号的html标签,比如空格,因为'&'标签又是传递多个参数的链接标签··我试试写一个替代掉'&'符号的方法试试看
[/Quote]
感觉还是用json传比较好
凉岑玉 2011-08-11
  • 打赏
  • 举报
回复
现在初步估计是由于传递的参数里有带'&'符号的html标签,比如空格,因为'&'标签又是传递多个参数的链接标签··我试试写一个替代掉'&'符号的方法试试看
飞跃颠峰 2011-08-11
  • 打赏
  • 举报
回复
xhr.send("u_comment_a.commentContent="+fck+"&users.userId="+userId+"&article.articleId="+articleId);

这种方法只适合拼接简单的字符串,不宜拼接带格式字符的复杂文本
建议传递Json
凉岑玉 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 little06 的回复:]

用HttpWatch监控一下ajax客户端是否真正提交了数据
服务端先不用java.net.URLDecoder.decode解码,直接看看输出效果
[/Quote]
这里,我解码那里是忘记注释掉了·之前以为是码的问题··后来加上去发现还是不得···直接打印的结果也是<p>
zl3450341 2011-08-11
  • 打赏
  • 举报
回复
理论来说Post 方法传参不会有长度限制, Get方式是有的,在IE 长度最大为2KB

little06 2011-08-11
  • 打赏
  • 举报
回复
用HttpWatch监控一下ajax客户端是否真正提交了数据
服务端先不用java.net.URLDecoder.decode解码,直接看看输出效果

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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