#javascript #ruby-on-rails #reactjs #ruby #uri
#javascript #ruby-on-rails #reactjs #ruby #uri
Вопрос:
Описание: Из пользовательского интерфейса (приложение React) Я отправляю объект, содержащий массивы, в параметрах.
const pkg = {
filters: '{}',
lines_per_page: 10,
page_number: 1,
query: '',
sorting: [
{ field_name: 'created_at', direction: 'ASC' },
{ field_name: 'csv_file_name', direction: 'ASC' }
]
}
Я преобразовываю поле «сортировка», используя собственный метод JS
encodeURIComponent( JSON.stringify(data) )
В итоге у меня есть запрос, который выглядит как
«page_number=1amp;query=amp;sorting=[{«field_name»:»created_at»,»direction»:»ASC»},{«field_name»:»csv_file_name»,»direction»:»ASC»}]amp;lines_per_page=10amp;filters={}amp;»
На стороне api я получаю в параметрах что-то вроде этого с неподходящими символами.
Parameters: {"page_number"=>"1", "query"=>"", "sorting"=>"[{"field_name":"created_at","direction":"ASC"},{"field_name":"csv_file_name","direction":"ASC"}]", "lines_per_page"=>"10", "filters"=>"{}", "upload"=>{}}
Насколько я понимаю, с обеих сторон существует различная кодировка и декодирование. Может быть, есть способ избежать этого на стороне пользовательского интерфейса или правильно декодировать на стороне Rails? Какой хороший способ в таких случаях?
PS: когда я использую в Rails to_query или encodeURIComponent() в JS, я получаю разные результаты
Комментарии:
1. Ваш const равен pkg, но вы строите данные. Строка запроса не похожа на JSON-представление объекта. Вы можете упорядочить объект, как вы это делаете, отправить его как один параметр и проанализировать его на стороне Rails без проблем. Но трудно дать совет с таким небольшим количеством и неполных примеров кода.
2. Почему бы вам не попробовать отправить их как POST-данные вместо того, чтобы кодироваться в URL? Это вариант?
Ответ №1:
Вы можете декодировать на стороне Rails через JSON.parse(параметры[«сортировка»])