Laravel 5.8 отвечает внутренней ошибкой сервера 500 на запрос ajax

Я пытаюсь отправить array на мой контроллер для сохранения в базе данных, если в этом случае я сделаю array a string, он сохранится в базе данных. поэтому, когда data: {'mapData' : arrayAllDrawings}, происходит сбой (arrayAllDrawings является массивом). Но когда это жестко закодировано как строка, подобная этой data: {'mapData' : 'string'},, она будет проходить и сохраняться в базе данных с помощью success message

Журналы ошибок от storage/logs, когда сервер выдает внутреннюю ошибку сервера 500

[2019-03-28 08:40:09] local.ERROR: Array to string conversion {"userId":1,"exception":"[object] (ErrorException(code: 0): Array to string conversion at C:\Users\Merlijn\AppData\Roaming\Composer\Laravel Projects\Forum\vendor\laravel\framework\src\Illuminate\Support\Str.php:354) [stacktrace]

Я попытался превратить массив JS в 1 длинную строку с помощью JS с .toString(), но все равно выдал ту же ошибку.

как выглядит массив JS, например:

2: Array(2)
0: "{"type":"Feature","properties":{},"geometry": 
{"type":"Point","coordinates":[4.90694,52.385973]}}"
1: {type: "Name", Status: "Insert pointer name"}
length: 2
__proto__: Array(0)
3: "{"type":"Feature","properties":{},"geometry": 
{"type":"Point","coordinates":[4.90694,52.385973]}}"
length: 4

код javascript ajax:

function saveInDb() {
        if (typeof arrayAllDrawings !== 'undefined' && arrayAllDrawings.length > 0) {
            $.ajax({
                method: 'POST', said in the route
                url: '{{ route('map.store') }}', gave in the route
                data: {'mapData' : arrayAllDrawings},
                success: function(response){ 
                    console.info(response);
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    console.info(JSON.stringify(jqXHR));
                    console.info("AJAX error: " + textStatus + ' : ' + errorThrown);
                }
            });
        } else {
            alert('The map has nothing on it!')
        }
    }

контроллер:

public function store(Request $request)
{
//        dd($request);
//        $mapData = Input::get('mapData');
//        dd($mapData);
    if (request()->ajax()){

        $mapData = Input::get('mapData');
        $map = new Map;
        $map->user_id = auth()->user()->id;
        $map->map = $mapData;
        $map->save();

        return response()->json(['status' => 'succes', 'message' => 'saved in database','data' => $mapData]);

    } else {

        return response()->json(['status' => 'fail', 'message' => 'this is not json']);

    }
}

Вы можете сохранить массив в БД, используя json_encode($mapData).

Sushant Jadhav 28.03.2019 10:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
1 033
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете легко управлять этим, преобразовав массив в строку, используя:

json_encode($your_array); or serialize($your_array);

Обратно можно сделать:

json_decode($string); or unserialize($string); 

что касается вышеуказанных функций использования.

Ответ принят как подходящий

Вы можете преобразовать массив javascript в json

JSON.stringify(arrayAllDrawings)

то вы можете получить это в виде json и преобразовать этот json с помощью

json_encode(json_decode($mapData,true));

а затем сохранить в базу данных.

Другие вопросы по теме