2017-09-12 9 views
0

CSRF保護のためのランダムなトークンを持つ非表示フィールドが1つあります。私は、フォームをシリアライズし、このように個別にこのフィールドを送信しようとしています:serialize()で追加の値を投稿しようとすると、値から+記号が削除されます

data: $("#profileForm").serialize() + "&form_token="+ form_token, 

何らかの理由で、それは+サインを残しても。トークンがあるのであれば、:

1xy2 + 80A3

それは次のようになります。

1xy280a3

そして、私のセッション変数トークンが見つからないための、私のフォーム・トークンと一致していません。この理由のために+記号。ランダムトークンに+が含まれていない場合は正常に動作します。なぜ私は+記号を除去しているのか分かりません。

答えて

1

あなたはdata:は、jQueryのから何かあれば、$.ajaxから例えば、あなたが直接serializeArrayの結果を渡すことができ、とjQueryを実行する

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

フォームデータを作成するために$.serializeArrayと一緒にjQueryの$.paramを使用することができます$.paramあなたのために内部で

data : $("#profileForm").serializeArray().concat([{name:'form_token', value:'1xy2+80a3'}], 
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>

1

はこちらencodeURIComponentで()メソッドチェックアウト:実際には、あなたの質問に答えるためにencodeURIComponent

を、+文字は予約されていますURIの文字で、送信前に置換されます。

関連する問題