[英]jQuery AJAX / Posting data with symbols
我通過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 =現有...
我了解出了什么問題,但不確定最好的解決方案是什么。 我將這些字符轉換為其他字符,還是有一種轉義它們的方法? 另外,是否還有其他會損害腳本的字符,例如加號(+)或減號(-)或撇號(')?
逃避每個價值觀。
var postData = "aid="+escape(aid)+"&lid="+escape(lid) ... ;
如果將postData作為地圖傳遞給jQuery,它將為您編碼組件:
var postData = { aid: aid,
lid: lid,
...
如果確實需要傳遞字符串,則應使用encodeURIComponent正確編碼用戶數據。
W3C具有有關表單編碼的更多信息 。
首先使用地圖。
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
。 什么時候應該使用轉義而不是encodeURI / encodeURIComponent? 謝謝@SamuelEdwinWard
只需使用:
postData = encodeURIComponent (postData);
啟動之前。
轉義,轉義,encodeURI,encodeURIComponent是使用Ajax可能需要的各種方法。 但是,如果您使用轉義( http://www.google.com ),則也將轉義:// ,從而破壞URI。 這就是為什么您應該使用encodeURI或encodeURIComponent的原因。 另請參見什么時候應該使用轉義符而不是encodeURI / encodeURIComponent?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.