前段时间在做无刷新提交评论时,遇到一个怪怪的问题一直无法解决,其实这个问题看起来很小,也就是在提交评论时,如果评论内容里面包括有;(分号) 时,哪么分号后面的内容将会无故的丢失。
我当时的写法:
$.ajax({
url: ‘/user/post/comment/add/’,
type: Componsents.Settings.AJAX_TYPE,
data:‘id=’ + Post.settings.ID + ‘&name=’ + txtName.val() + ‘&body=’ + txtBody.val() + ‘&follow=’ + follow+ ‘&url=’ + encodeURI(txtUrl.val()) + ‘&email=’ + txtEmail.val(),
dataType:“json”,
success: function(state){
}
});
这里 data 参数是像 GET 方法一样的写法,问题就在这里,组合成一长段时,在jQuery解析成JSON提交给服务器的时候会把分号后面的截断。这个问题以前做了哪么多还一直没有遇到过,所以哪天我觉得很奇怪,以为是python或者django在处理时候出的问题,但通过Firebug查看提交数据与换了几种方式提交,找出了问题确实是出在Javascript提交的时候。
于是我试着给body的内容做 escape 处理,但这样做问题就来了,这样处理过的数据到了python里面会出现中文乱码…麻烦,哪天试了好多种方式还是不得解,于是暂时搁置。
今天又试着去修正这个问题,突然想到jQuery在ajax提交的时候会不会有另外一种data格式以处理这种类似问题,于是再次看了看 关于jquery ajax的文档 (自从用熟悉以后很久都没看过它了)。
果然它有提供JSON格式的data参数,这下就爽了,问题迎刃而解!
正确的写法:
$.ajax({
url: ‘/user/post/comment/add/’,
type: Componsents.Settings.AJAX_TYPE,
data: {
id: Post.settings.ID,
name: txtName.val(),
body: txtBody.val(),
follow: follow,
url: txtUrl.val(),
email: txtEmail.val()
},
dataType:“json”,
success: function(state){
}
});
总的来说,这个问题是因为我一直习惯了像GET一样组合data参数的写法而带来的问题,希望这篇文章能给有类似习惯的开发人员带来帮助。