2010-07-22 34 views
125

Tôi đang cố tìm thông tin về cách sắp xếp một đối tượng theo định dạng chuỗi truy vấn, nhưng tất cả tìm kiếm của tôi đều bị chết đuối trong kết quả về cách đi theo cách khác (chuỗi/biểu mẫu/bất cứ điều gì để JSON).Serialize object thành chuỗi truy vấn trong JavaScript/jQuery

Tôi có

{ one: 'first', two: 'second' } 

và tôi muốn

?one=first&two=second 

Có cách nào tốt để làm điều này? Tôi không quan tâm bổ sung hoặc whatnots - nếu mã tôi thấy không phải là một plugin, tôi sẽ có lẽ lại viết nó vào một anyway ...

+3

Dưới đây là một số giải pháp JS đơn giản tốt đẹp: http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object Một số giải pháp không dài hơn các giải pháp khung hình ở đây. –

Trả lời

203

Bạn muốn $.param(): http://api.jquery.com/jQuery.param/

Cụ thể, bạn muốn này:

var data = { one: 'first', two: 'second' }; 
var result = $.param(data); 

Khi một cái gì đó cho như thế này:

{a: 1, b : 23, c : "[email protected]#st"} 

$.param sẽ trở lại này:

a=1&b=23&c=te!%40%23st 
+8

Lưu ý rằng nếu bạn có một mảng trong đối tượng của bạn, nó không được tham số chính xác. – crv

+2

@crv: Đúng vậy. JSON có lẽ là tốt nhất trong trường hợp đó –

+0

@crv Tôi có một mảng trong mỏ và nó hoạt động tốt. –

12

tùy chọn khác có thể là node-querystring.

Tính năng này có sẵn ở cả hai số npmbower, đó là lý do tôi sử dụng nó.

43

Đối với một hàm phi JQuery nhanh chóng ...

function jsonToQueryString(json) { 
    return '?' + 
     Object.keys(json).map(function(key) { 
      return encodeURIComponent(key) + '=' + 
       encodeURIComponent(json[key]); 
     }).join('&'); 
} 

Note này không xử lý mảng hoặc đối tượng lồng nhau.

+1

Cool, hoạt động! Tôi đã chỉ thêm 'if (json [key]! = Null)' cho bỏ sót nulls –

+1

Đây là một giải pháp tốt, chỉ có JavaScript. Người ta có thể gán cuộc gọi tới 'Object.keys' thành biến' params' và 'return params.length && params.join ('&') || "" 'cho các trường hợp đối tượng có thể trống, nghĩa là' json = {} '. –

+0

Điều này hoạt động tốt hơn '$ .param' vì param mã hóa cho các biểu mẫu không phải là url, vì vậy với không gian param trở thành' + 'thay vì'% 20' có thể gây ra tất cả các loại vấn đề, đặc biệt với MVC – NibblyPig

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