簡體   English   中英

jQuery AJAX /使用符號發布數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM