当你用ajax传递值到服务器端,如果值中包含特殊字符串如+,&等,在服务器端获取的结果可能就会出现差异,因为这些字符有其它用途,如“+”表示连接符,在转义后你获取到的就是空格。
可以看看这些特殊字符与十六进制的关系:
+ | 空格 | / | ? | % | & | = | # |
%2B | %20 | %2F | %3F | %25 | %26 | &3D | %23 |
如果变量中确实需要包含这些特殊字符,请用encodeURIComponent()函数过滤,它会对这些字符编码,服务器端是会被自动解码的,不需要处理。
另外,尽量提交json格式数据 如 {a:"aaa", b:"bbb"} 而非 "a=aaa&b=bbb"
例子
代码如下 | 复制代码 |
<script type="text/javascript"> //alert("你好"); function good(){ //alert("您好 Ajax"); var myurl = document.getElementById("txtUrl").value; var mydata = {"URL" : myurl}; alert(myurl); var jsonData = {"ClientName":"爱&国","URL":"http://192.168.1.8:9080/GeoSearch?Request=geo&level=geometry&ClientName=美国"}; $.ajax({ type: "POST", //ContentType: "text/xml;utf-8",//这里需要加个utf-8 //dataType:"xml", url: "Tserver", //dataType:"xml", data:mydata, //data:jsonData, //data:{"ClientName":"爱&国","URL":"http://192.168.1.8:9080/GeoSearch?Request=geo&level=geometry&ClientName=美国"}, //data: "ClientName=J/&o#爱国美丽&##hn@@@@人&location=Boston", success: function(data, textStatus){ document.getElementById("g").value=data; //alert(data); alert(jsonData); }, error:function (XMLHttpRequest, textStatus, errorThrown) { // 通常 textStatus 和 errorThrown 之中 // 只有一个会包含信息 //this; // 调用本次AJAX请求时传递的options参数 // alert("bad"); alert(textStatus); //alert(errorThrown); } }); } </script> </head> <body> <div id="url"> 资源地址 :<input type="text" size="50" value="" id="txtUrl" /><br /> 资源名字 :<input type="text" size="50" value="" id="txtName" /> </div> <input type="button" value="Ajax请求" onclick=good() /> <br /> <TextArea rows="10" cols="90" id="g"></TextArea> <div> </div> </body> </html> |
服务器端:
代码如下 | 复制代码 |
package test; import java.io.IOException; public class Tserver extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { public Tserver() { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { |