2011-11-23 46 views
0

我看到我們在JavaScript代碼庫的線構造查詢字符串:如何以更好的方式編寫這個查詢字符串?

var queryParameters = "imagePath=" + encodeURIComponent(_image.source) + "&saveMode=" + saveMode + "&pageFolderId=" + pageFolderId + "&id=" + pageId + "&parent=" + parent; 
    queryParameters += "&quality=" + sQuality.value + "&commands=" + commandQueue.Serialize(); 

有沒有更好的方式來寫這個?

+0

什麼是與這條線的問題呢?你在尋找更易讀的東西嗎? – Rodolphe

回答

4

如果您正在使用jQuery,你可以只使用代表您的查詢字符串選項的對象:

var queryParameters = jQuery.param({ 
    imagePath: _image.source, 
    saveMode: saveMode, 
    pageFolderId: pageId, 
    // ... 
}); 

jQuery將自動編碼的查詢字符串值,這樣你就不會需要調用encodeURIComponent_image.source。詳情參見:http://api.jquery.com/jQuery.param/

1

你可以使用換行符:

var queryParameters = "imagePath=" + encodeURIComponent(_image.source) 
    + "&saveMode=" + saveMode 
    + "&pageFolderId=" + pageFolderId 
    + "&id=" + pageId 
    + "&parent=" + parent 
    + "&quality=" + sQuality.value 
    + "&commands=" + commandQueue.Serialize(); 
0

你可以把所有的數據到一個數組,然後執行一個連接。通常數組的連接速度比連接速度快,但如果不多次創建此字符串不應有所作爲。

var arr = []; 
arr[1] = "item1"; 
arr[2] = "item2"; 
arr[3] = "item3"; 
var result = arr.join(''); 

這樣寫入可以提高可讀性和調試的效率。你可以很容易地評論一個參數。

+0

一次加入數組的速度很快,但JavaScript引擎優化似乎改變了這一切。 http://jsperf.com/string-concatenation-plus-vs-join。 –

+0

謝謝你指出這一點。但是還有很多其他因素,比如你使用什麼瀏覽器和哪個版本。您必須查看大多數用戶擁有哪種瀏覽器並對其進行優化。 – DimDqkov

0

如何:

function qSerialize(obj){ 
    var q = []; 
    for (var l in obj) { 
    if (obj.hasOwnProperty(l)){ 
    q.push(l+'='+obj[l]); 
    } 
    } 
    return q.join('&'); 
} 

var qParamStr = qSerialize( 
{ 
    imagePath: encodeURIComponent(_image.source), 
    saveMode: saveMode, 
    pageFolderId: pageFolderId, 
    id: pageId, 
    parent: parent, 
    quality: sQuality.value, 
    commands: commandQueue.Serialize() 
} 
); 
相關問題