我在AJAX调用中发送了很多值,如下所示:
var postData = "aid="+aid+"&lid="+lid+"&token="+token+"&count="+count+"&license="+license;
postData = postData + "&category="+category+"&event_name="+event_name+"&set_menu="+set_menu;
postData = postData + "&set_id="+set_id+"&location="+location+"&delay="+delay;
然后像这样发送电话:
$.ajax({
type : 'GET',
url : 'ajax/createFolderID.asp',
dataType : 'html',
data : postData,
success : function() { do something },
complete : function() { do something },
error : function() { do something }
});
问题是,其中一个查询字符串值“event_name”来自用户输入。如果用户输入&符号(&),则postData字符串会断开,并且不会在该符号后发送任何内容。
示例案例:& event_name = D& G服装发布 方安培; set_menu =现有...
我明白出了什么问题,但不太确定最好的解决办法是什么。我是否将这些字符转换为其他字符,或者有没有办法逃避它们?此外,还有其他任何会对脚本造成伤害的字符,例如加号(+)或减号( - )符号或撇号(')吗?
答案 0 :(得分:6)
逃离你的每一个价值观。
var postData = "aid="+escape(aid)+"&lid="+escape(lid) ... ;
答案 1 :(得分:3)
如果您将postData作为地图传递给jQuery,它将为您编码组件:
var postData = { aid: aid,
lid: lid,
...
如果您确实需要传递字符串,则应使用encodeURIComponent正确编码用户数据。
答案 2 :(得分:1)
首先使用地图。
post = {
"aid":aid,
"lid":lid,
"token":token
...
}
然后生成url编码的字符串。
a=[];
for(var x in post){
a.push(encodeURIComponent(x)+"="+encodeURIComponent(post[x]));
}
var postData = a.join("&");
更新1: 如果您使用的是jQuery,则无需生成url编码的字符串。只需通过地图。
更新2:
escape
不好用,只能用 ASCII 处理。所以使用encodeURIComponent
。 When are you supposed to use escape instead of encodeURI / encodeURIComponent? 谢谢@SamuelEdwinWard
答案 3 :(得分:0)
只需使用:
postData = encodeURIComponent (postData);
在发起之前。
escape,unescape,encodeURI,encodeURIComponent是使用Ajax可能需要的各种方法。 但是,如果您使用转义(http://www.google.com),您还将转义:// ,从而销毁您的URI。 这就是你应该使用encodeURI或encodeURIComponent的原因。 另请参阅When are you supposed to use escape instead of encodeURI / encodeURIComponent?