2008-09-21 28 views

Trả lời

133

Ở đây bạn đi:

function encodeQueryData(data) { 
    let ret = []; 
    for (let d in data) 
    ret.push(encodeURIComponent(d) + '=' + encodeURIComponent(data[d])); 
    return ret.join('&'); 
} 

Cách sử dụng:

var data = { 'first name': 'George', 'last name': 'Jetson', 'age': 110 }; 
var querystring = encodeQueryData(data); 
+8

Khi lặp lại với 'for', sử dụng [hasOwnProperty] (http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty) để đảm bảo khả năng tương tác. – troelskn

+3

@troelskn, điểm tốt ... mặc dù trong trường hợp này, ai đó sẽ phải mở rộng Object.prototype để phá vỡ nó, đó là một ý tưởng khá xấu để bắt đầu. – Shog9

+1

@ Shog9 Tại sao nó là một ý thức xấu? –

7

Nếu bạn đang sử dụng PrototypeForm.serialize

Nếu bạn đang sử dụng jQuery có được Ajax/serialize

Tôi không biết về bất kỳ chức năng độc lập để thực hiện điều này, tuy nhiên, nhưng một tìm kiếm google cho nó bật lên một số tùy chọn đầy hứa hẹn nếu bạn hiện không sử dụng thư viện. Nếu bạn không, mặc dù, bạn thực sự nên vì họ là thiên đàng.

+5

jQuery.param() sẽ đưa đối tượng và chuyển đổi nó để GET chuỗi truy vấn (chức năng này các trận đấu tốt hơn các câu hỏi). – azurkin

-8

Điều này thread trỏ đến một số mã để thoát URL trong php. Có escape()unescape() sẽ thực hiện hầu hết công việc nhưng bạn cần thêm một vài thứ.

function urlencode(str) { 
str = escape(str); 
str = str.replace('+', '%2B'); 
str = str.replace('%20', '+'); 
str = str.replace('*', '%2A'); 
str = str.replace('/', '%2F'); 
str = str.replace('@', '%40'); 
return str; 
} 

function urldecode(str) { 
str = str.replace('+', ' '); 
str = unescape(str); 
return str; 
} 
+1

encodeURIComponent xử lý việc này và không sử dụng sai + cho khoảng trắng. – AnthonyWJones

58

chức năng

function encodeData(data) { 
    return Object.keys(data).map(function(key) { 
     return [key, data[key]].map(encodeURIComponent).join("="); 
    }).join("&"); 
} 
+1

Đẹp nhất! .map() đã được thực hiện trong JavaScript 1.6 nên hầu như tất cả các trình duyệt, ngay cả những trình duyệt hỗ trợ nó. Nhưng như bạn có thể đoán IE không ngoại trừ IE 9+. Nhưng đừng lo, có một cách giải quyết khác. Nguồn: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map#Browser_compatibility –

+0

'var data = {bloop1: true, bloop2:" something "}; var url = "https://something.com/?"; var params = encodeData (dữ liệu); var finalUrl = url + params; // Đây có phải là quyền sử dụng không? 'Nên sản xuất' https: //www.something.com/? Bloop1 = true & bloop2 = something'? –

7

Chúng tôi vừa phát hành arg.js, một dự án nhằm giải quyết vấn đề này một lần và mãi mãi. Nó truyền thống là rất khó khăn nhưng bây giờ bạn có thể làm:

var querystring = Arg.url({name: "Mat", state: "CO"}); 

Và đọc hoạt động:

var name = Arg("name"); 

hoặc nhận được toàn bộ rất nhiều:

var params = Arg.all(); 

và nếu bạn quan tâm về sự khác biệt giữa ?query=true#hash=true thì bạn có thể sử dụng các phương thức Arg.query()Arg.hash().

17

Zabba đã cung cấp trong nhận xét về câu trả lời hiện được chấp nhận mà đề xuất với tôi là giải pháp tốt nhất: sử dụng jQuery.param().

Nếu tôi sử dụng jQuery.param() trên các dữ liệu trong câu hỏi ban đầu, sau đó mã đơn giản là:

var params = jQuery.param({ 
    var1: 'value', 
    var2: 'value' 
}); 

Biến params sẽ

"var1=value&var2=value" 

Đối phức tạp hơn ví dụ, đầu vào và đầu ra, xem tài liệu jQuery.param().

2

Một thay đổi nhỏ để nguyên cảo:

public encodeData(data: any): string { 
    return Object.keys(data).map((key) => { 
     return [key, data[key]].map(encodeURIComponent).join("="); 
    }).join("&"); 
    } 
2

Giống như để lại câu hỏi này gần 10 tuổi. Trong thời đại lập trình sẵn có này, đặt cược tốt nhất của bạn là thiết lập dự án của bạn bằng cách sử dụng trình quản lý phụ thuộc (npm). Có một toàn bộ ngành công nghiệp tiểu thủ của thư viện ra có mã hóa chuỗi truy vấn và chăm sóc của tất cả các trường hợp cạnh. Đây là một trong những phổ biến hơn -

https://www.npmjs.com/package/query-string

Các vấn đề liên quan