2011-11-23 45 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() 
} 
); 
相关问题