ajax传参里含有特殊字符的坑

问题场景:今天在测试自己手上的页面功能时,发现一个小bug,在用ajax向后台发数据时,只要参数中出现一些特殊字符,控制台会报错http 400的问题,其实就是特殊字符服务器不能解析。好了,问题是找到了,但是改如何解决勒!

首先想到的就是把特殊字符进行编码在传递,但是自己写检测特殊字符函数代码时发现,这要检测的特殊字符数不胜数,完全正则不过来。
上网搜了一下,发现有一个现成的方法:encodeURIComponent();放在代码上跑一下,任务解决了!哈哈。问题解决了,但是还是要看看其中的更深的原理!

特殊符号由前台传入时如果没有进行转码处理的,是这样:my param is 7% and 6%7,异常显示是[my para is 7is%207%%20and%206%7],所以就出错了,

下面是一些常见字符列表

url特殊符号 在url中实际含义 转码后的十六进制表示

符号 含义 编码
+ +号表示空格 %2B
空格 用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的 URL 和参数 %3F
% 指定特殊字符 %25
# 表示书签 %23
& 参数间的分隔符 %26
= URL 中指定参数的值 %3D

解决方案其实都是类似的,这个看自己的习惯。

方案一:var str= para.replace(/%/g,"%25");//g代表全局匹配替换
方案二:encodeURIComponent(str); //使用改方法自动转码。

存疑问方案:网上有说用json格式的参数就能解决,但是自己本身就是用的json格式的,但是出现这类问题!所以存疑问!

转自:http://www.cnblogs.com/smalldark/p/6496675.html

时间: 2024-10-07 17:39:29

ajax传参里含有特殊字符的坑的相关文章

jq中的ajax传参

    一.   jq中的Ajax传参有两种           1.通过url地址来传参    2.通过data来传递参数 1. url来传递参数 function GetQuery(id) { if (id ==1||id==7) { var name = "语文"; $.ajax({ url:"../ajaxHandler/ChartsHandler.ashx?id="+id+"&name="+name +"",

ajax传参到实体类对应字段

之前看公司的代码,从页面ajax传参数到接口类,接口类用一个实体接收.我一直以为c#会自动识别,赋值到同名的字段. 我曾和朋友讨论过,双方辩论.朋友认为c#没有这种功能,没有这样高级匹配的机制.而我因为在项目中使用的是直接传值,并没有做过什么拼接或转换,所以我认为c#会自动把同名的自动赋值.朋友不同意,于是我们觉得代码上见分晓. 打开vs,我们开始调试,写好一段ajax的js,Url就写接口类的路径,参数为一段json,然后接口类那边接收json.写到接口类的时候,我想要接收ajax传来的数据,

2015/10/19总结:ajax传参、jquery.validate自定义日期校验

以下内容仅来自于日常实践零碎回顾.总结,不保证正确性,欢迎路过的大神指点指点! 1.这几天一直在写jsp前端页面,了解到前端与后端数据交互数据有两种.一种是form 的submit方式提交,这种方法可以在表单里通过声明属性:method = 'post'声明表单提交的方式(要与后台的controller的RequestMethod属性对应),  action = ‘ url’声明表单提交后跳转的页面(好像采用这种方式一般都要跳转页面).另一种方式就是通过ajax提交,ajax提交和响应的数据方式

ajax传参在ie8中的问题

/*获取隐藏域数据,并将数据转为数组*/ var Ids = x.val(); var eachParamer = Ids.substring(0,Ids.length-1).split(","); $.ajax({ url: m+"/selfprogram/selfProgram/showParam?paramIds="+Ids,", type: "post", dataType:"json", data:{&qu

day8——ajax传参到action(Struts2)

第一种:url+?+参数 jsp中: $(function(){ $("[name='delemp']").click(function(){ $this = $(this); $delid = $this.attr("delid"); if(confirm("确认删除该条数据吗?")){ $.ajax({ type:"get", url:"deleteemployeebyid?delid="+$delid

formValidator向struts2 ajax传参验证

话不多说,直接上代码 页面head里面的formvalidator验证配置 <script type="text/javascript"> $(document).ready(function() { $.formValidator.initConfig({ formID : "form1", theme : "ArrowSolidBox", wideWord : false, submitOnce : true, onError :

ajax传参数组之request.getParameterValues

web项目中,一般与后台进行交互,都使用ajax进行数据的提交 在数据提交的过程中,一般为提交数据对象.但是在通常过程中,会使用到传入一系列的数据.如批量删除. 我们可以通过传入数组来实现 有以下几种方式:    1.直接传入一个对象数组 var param = [];            param.push({"name":"ids", "value":id});                        $.ajax({      

XMLHttpRequest Ajax传参,回传过程中不允许再次点击

先记录一下关于状态码的问题吧,因为这里面涉及到两个属性readyState和status: readyState是XMLHttpRequest对象的一个属性,用来标识当前XMLHttpRequest对象处于什么状态. status是XMLHttpRequest对象的一个属性,表示响应的HTTP状态码. 当readyState==4  完成响应状态:此时,已经完成了HTTP响应的接收,当status==200   请求成功.例如200状态码,表示请求所希望的响应头或数据体将随此响应返回. 所以当r

JS分析URL字符串,取得参数名,AJAX传参请求代码示例

//当前页面URL中参数分析函数,正则校验 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return