Как отправить параметры, содержащие объекты, массивы, в Rails api, чтобы они были проанализированы?

#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(параметры[«сортировка»])