jQuery AJAX /使用符号发布数据

时间:2012-02-01 20:30:40

标签: javascript ajax jquery

我在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 =现有...

我明白出了什么问题,但不太确定最好的解决办法是什么。我是否将这些字符转换为其他字符,或者有没有办法逃避它们?此外,还有其他任何会对脚本造成伤害的字符,例如加号(+)或减号( - )符号或撇号(')吗?

4 个答案:

答案 0 :(得分:6)

逃离你的每一个价值观。

var postData = "aid="+escape(aid)+"&lid="+escape(lid) ... ;

答案 1 :(得分:3)

如果您将postData作为地图传递给jQuery,它将为您编码组件:

var postData = { aid: aid,
                 lid: lid,
                 ...

如果您确实需要传递字符串,则应使用encodeURIComponent正确编码用户数据。

W3C有some more information on form encoding

答案 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?