尝试使用serialize()发布其他值会从值中删除+符号

时间:2017-09-12 19:58:49

标签: jquery json ajax

我有一个隐藏字段,其中有一个随机令牌用于CSRF保护。我正在序列化一个表单并尝试单独发送这个字段:

c

出于某种原因虽然它没有留下+标志。所以,如果令牌是:

1xy2 + 80A3

它变成了:

1xy280a3

因此,我的会话变量令牌与我的表单令牌不匹配,因为缺少+符号。如果随机令牌中没有+,那么它可以正常工作。我不明白为什么它会移除+符号。

3 个答案:

答案 0 :(得分:2)

  

jQuery Encode/Decode字符串



var Param1 = '1xy2+80a3'; 
var encoded = encodeURIComponent(Param1);
$("#Encode").text(encoded);

var Param2 = '1xy2%2B80a3';
var decoded = decodeURIComponent(Param2);
$("#Decode").text(decoded);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span>Encode  String<span><br>
<code id="Encode"></code ><hr>
<span>Decode  String<span><br>
<code  id="Decode"></code>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

在此处查看encodeURIComponent()方法:encodeURIComponent

要真正回答你的问题,+字符是URI中的保留字符,将在传输之前被替换。

答案 2 :(得分:1)

您可以将jQuery的$.param$.serializeArray一起使用来创建表单数据

data : $.param($("#profileForm").serializeArray()
                                .concat([{name:'form_token', value:'1xy2+80a3'}]
       )),

如果data:来自jQuery,例如来自$.ajax,则可以直接传递serializeArray的结果,jQuery将在内部为您运行$.param

data : $("#profileForm").serializeArray().concat([{name:'form_token', value:'1xy2+80a3'}],
相关问题