проблема с преобразованием массива в json с использованием AJAX в laravel

#php #jquery #ajax #laravel

#php #jquery #ajax #laravel

Вопрос:

У меня проблема с преобразованием массива в JSON в laravel с использованием ajax-запроса. Вот мой код

AJAX-код:

   data = {
    clients: clients,
   _token:$('input[name="_token"]').val()
  }

$.ajax({
        url: '{{URL::to('/url')}}' '/'   trainer_id,
        type: 'POST',
        dataType: 'json',
        data: data,
        success: function (response) {
        }, error: function (response) {
        }
       });


  

клиенты — это массив, и у него есть идентификаторы. Это выглядит как: клиенты:
Массив[3]
0:859
1:883
2:885

Код контроллера Laravel:

 public function myCode($id, Request $request) {
        dd(json_encode($request->clients));
}

  

Ответ кода : «[«859″,»883″,»885″]».

Но я хочу это : [«859″,»883″,»885»].

Кто-нибудь знает решение?

Заранее спасибо!

Комментарии:

1. Похоже, $request->clients что это уже JSON.

2. Нет, это массив, который выглядит так: array:3 [ 0 => «859» 1 => «883» 2 => «885» ]

3. Я добавил ответ, который должен сработать. 🙂

4. json_encoding для массива не приведет к заключению строки в кавычки. Но json_encode-ing этой строки, бы. Похоже, что где-то он получает двойное кодирование.

Ответ №1:

измените это на

 public function myCode($id, Request $request) {
      return response()->json($request->clients);
}
  

вы также можете отправлять дополнительные параметры

 public function myCode($id, Request $request) {
      return response()->json(['data'=>$request->clients,'status'=>true]);
}
  

Комментарии:

1. Он возвращает массив, и я хочу, чтобы он был в формате json

Ответ №2:

json_encode() Возвращает строку. Просто используйте dd($request->clients);

Ответ №3:

в javascript успешный обратный вызов

 JSON.parse("["859","883","885"]") = [859,883,885];

JSON.parse(response); // in your case
  

Ответ №4:

 public function myCode($id, Request $request) {
    return response()->json($request->clients);
}
  

Ответ №5:

Проблема здесь:

 public function myCode($id, Request $request) {
    dd(json_encode($request->clients));  // There is no use of dd(), dd() is used for debugging purpose
}
  

измените его на:

 public function myCode($id, Request $request) {
    return response()->json($request->clients);  // We have to return this data as json that's why we use json() here
}
  

Редактировать: Для отправки дополнительных данных создайте массив и передайте $request->clients его один из ключей и верните этот массив как:

 return response()->json($your_array);
  

Комментарии:

1. Да, я могу сделать так, но я хочу передавать клиентов в одном json, поэтому я не могу сделать так

2. Я вас не понимаю?

3. Это не мой последний ответ для отправки. Мне нужно передать также другие данные в ответ, и я использую guzzle, поэтому я передаю их следующим образом: $RequestOptions = [‘form_params’ => [ «trainer_id» => $ param, «client_ids» => $ clientArr ]]; . Итак, как я могу использовать response()-> json() с ним??

Ответ №6:

вот описание использования JSON_FORCE_OBJECT

   json_encode($request->clients, JSON_FORCE_OBJECT)