Laravel 5.8 отвечает с 500 внутренняя ошибка сервера на запрос AJAX - PullRequest
0 голосов
/ 28 марта 2019

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

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

[2019-03-28 08:40:09] local.ERROR: преобразование массива в строку {"userId": 1, "exception": "[object] (ErrorException (code: 0): преобразование массива в строку в C: \ Users \ Merlijn \ AppData \ Roaming \ Composer \ Laravel Projects \ Forum \ vendor \ laravel \ framework \ src \ Illuminate \ Support \ Str.php: 354) [StackTrace]

Я попытался превратить массив JS в 1 длинную строку с in 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.log(response);
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    console.log(JSON.stringify(jqXHR));
                    console.log("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']);

    }
}

Ответы [ 2 ]

1 голос
/ 28 марта 2019

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

JSON.stringify(arrayAllDrawings)

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

json_encode(json_decode($mapData,true));

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

1 голос
/ 28 марта 2019

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...