Привет, есть кусок кода которая переводить JS обьект на URL параметер, типа:
obj = { name: 'test', pwd: '123', data: { count: 2 } }
parameterize(obj) # => "name=test&pwd=123&data[count]=2"
На этих данных функция работает неправильно:
finish_game = {
"clickCounter" : {"hint" : 0},
"level": 0,
"first_word": "Company",
"edges": {
"0" : [1,4]
},
"vertices":{
"0" : {"text":"Company", "coordinates": [2427.6,2512.45]}
}
}
qwe = {}
qwe.data = finish_game
qwe.auth_token = 'asdasd'
qwe.op = "q2wqwe"
qwe.game_code = 'qwe'
parameterize(qwe) # => data[clickCounter][hint]=0&data[clickCounter][level]=0&data[clickCounter][first_word]=Company&data[clickCounter][edges][vertices][0][text]=Company&data[auth_token]=asdasd&data[op]=q2wqwe&data[game_code]=qwe
# data[clickCounter][first_word]=Company <-- Что ЭТО ???
# data[clickCounter][edges][vertices][0][text]=Company
Вот и сама функция:
parameterize = (params) ->
pairs = []
do proc = (object=params, prefix=null) ->
for own key, value of object
if value instanceof Array
for el, i in value
proc(el, if prefix? then "#{prefix}[#{key}][]" else "#{key}[]")
else if value instanceof Object
if prefix?
prefix += "[#{key}]"
else
prefix = key
proc(value, prefix)
else
pairs.push(if prefix? then "#{prefix}[#{key}]=#{value}" else "#{key}=#{value}")
pairs.join('&')
Код вроде нормальный, подскажите в чем проблема если знаете.
UPDATE:
Хочу получить вот это:
"data[clickCounter][hint]=0&data[level]=0&data[first_word]=Company&data[edges][0][]=1&data[edges][0][]=4&data[vertices][0][text]=Company&data[vertices][0][coordinates][]=2427.6&data[vertices][0][coordinates][]=2512.45&auth_token=asdasd&op=q2wqwe&game_code=qwe"
parameterize(qwe) # =>
"data[clickCounter][hint]=0&data[clickCounter][level]=0&data[clickCounter][first_word]=Company&data[clickCounter][edges][vertices][0][text]=Company&data[auth_token]=asdasd&data[op]=q2wqwe&data[game_code]=qwe"
Код получен отсюда: http://stackoverflow.com/a/9472534