Внутренняя ошибка сервера 500 с использованием Ajax в блейде Laravel с использованием POST - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть кнопка в моем клинке:

<button id="save-adjuster" style="color:black" class="btn btn-xs btn-warning">Save Result</button>

И у меня есть следующий JavaScript для обработки его через Ajax:

<script>
                $( "#save-adjuster" ).click(function() {
                        $.ajax({
                                url: '{{ Request::url() }}/save-adjuster',
                                type: 'POST',
                                data: {
                                        "_token": "{{ csrf_token() }}",
                                        "splitname": "{!! $split_name !!}",
                                        "adjusting_payment": "{!! ($adjusting_amount/2) !!}"
                                }, 
                                success: function (result) {
                                        alert("Saved", "This split scenario's adjusting payment amount has been saved", "success")
                                },
                                error: function (result) {
                                        alert({
                                title: "Oops",
                                text: "We ran into an issue trying to save this item",
                                icon: "error",
                                button: "Dismiss",
                                })
                                }
                                });  
                        });
                </script>

При просмотре в качестве источника страницы отображаются правильно сформированные параметры «данных». Я получаю ошибку jquery-2.0.3.min.js:6 POST 500 (Internal Server Error) с диалоговым окном с надписью

localhost:8080 says [object Object]

Похоже, что ajax сформирован правильно, но он никогда не достигает контроллера (ниже), так как dd () в моем контроллере никогда не срабатывает. Мои журналы ошибок Apache вообще ничего не показывают - это не записывается в журналах, даже если это явно ошибка сервера.

Я прочитал почти все ссылки на такую ​​ошибку Laravel Ajax, и почти все относится к отсутствию токена CSRF, но у меня это есть, и инспектор и консоль Chrome показывают правильно сформированный токен.

FWIW, вот мой маршрут:

Route::post('tax-split-scenario/{split_name}/save-adjuster', 'GenerateScenarioController@storeAdjuster')->middleware('auth');

и вот мой контроллер:

public function storeAdjuster(Request $request)
{
    dd($request->input('splitname'));

    //Store splt adjuster amount
    $update_split = SplitScenarioAdjustment::where('split_scenario_name', '=', $request->splitname, 'and')->where('created_by_id', '=', Auth::id())->first();
    $update_split->adjusting_payment = $request->adjusting_payment;
    $update_split->save();


    return redirect()->route('named-split-scenario', [$split_name]);
}

Я использую Laravel 5.5 и XAMPP в Windows 10.

Любые предложения приветствуются. Я просмотрел все предлагаемые публикации здесь и в других местах в Интернете, но безрезультатно, и я остановился - заранее благодарю за любую помощь.

:: ДОБАВЛЕННЫЙ КОНСОЛЬНЫЙ ВЫХОД ::

jquery-2.0.3.min.js:6 POST http://localhost:8080/DS_dev_01/public/tax-split-scenario/Gregs/save-adjuster 500 (Internal Server Error)
send @ jquery-2.0.3.min.js:6
ajax @ jquery-2.0.3.min.js:6
(anonymous) @ Gregs:2250
dispatch @ jquery-2.0.3.min.js:5
y.handle @ jquery-2.0.3.min.js:5
Gregs:2263 Uncaught ReferenceError: data is not defined
    at Object.error (Gregs:2263)
    at l (jquery-2.0.3.min.js:4)
    at Object.fireWith [as rejectWith] (jquery-2.0.3.min.js:4)
    at k (jquery-2.0.3.min.js:6)
    at XMLHttpRequest.<anonymous> (jquery-2.0.3.min.js:6)
error @ Gregs:2263
l @ jquery-2.0.3.min.js:4
fireWith @ jquery-2.0.3.min.js:4
k @ jquery-2.0.3.min.js:6
(anonymous) @ jquery-2.0.3.min.js:6
load (async)
send @ jquery-2.0.3.min.js:6
ajax @ jquery-2.0.3.min.js:6
(anonymous) @ Gregs:2250
dispatch @ jquery-2.0.3.min.js:5
y.handle @ jquery-2.0.3.min.js:5
jquery-2.0.3.min.js:6 XHR failed loading: POST "http://localhost:8080/DS_dev_01/public/tax-split-scenario/Gregs/save-adjuster".
send @ jquery-2.0.3.min.js:6
ajax @ jquery-2.0.3.min.js:6
(anonymous) @ Gregs:2250
dispatch @ jquery-2.0.3.min.js:5
y.handle @ jquery-2.0.3.min.js:5

Когда я изменяю функцию ошибки на (потому что она показала «данные» выше как неопределенные):

                        error: function (data, url) {
                                console.log(data);
                                console.log(url);
                                alert({
                        title: "Oops",
                        text: "We ran into an issue trying to save this item",
                        icon: "error",
                        button: "Dismiss",
                        })

Я получаю много вложенных рекурсивных выводов в консоли (слишком большой, чтобы публиковать их здесь), но ничего не вижу, чтобы указать, в чем проблема, кроме моего URL "не удалось загрузить"

Кроме того, изменив мой маршрут, чтобы увидеть, был ли вызываемый URL каким-то образом неправильным:

Route::post('tax-split-scenario/{split_name}/save-equalizer',function()
    {return 'Success, the route from Ajax is working';
    });

не получает ответа, подтверждая, что я не захожу так далеко. Это, очевидно, не работает в блейде JavaScript.

// ОБНОВЛЕНИЕ //

Похоже, что код ошибки для окна предупреждения был проблемой. Я изменил код скрипта на:

        <script>
        $( "#save-adjuster" ).click(function() {
                console.log('{{$split_name}}');
                $.ajax({
                        url: '{{ Request::url() }}/save-adjuster',
                        type: "POST",
                        data: {
                                "_method": 'POST',
                                "_token": "{{ csrf_token() }}",
                                "splitname": '{!! $split_name !!}',
                                "adjusting_payment": 1000
                        }, 
                        dataType: 'json',
                        success: function (data) {
                                //console.log(data);
                                alert("Saved", "This amount has been saved", "success")

                        },
                        error: function (data, url) {
                                //console.log(data);
                                //console.log(url);
                                alert("We ran into an issue trying to save this item")
                        }

                        });  
                });
        </script>

и ошибка сервера исчезла, но теперь я получаю это в консоли:

Gregs
jquery-2.0.3.min.js:6 XHR finished loading: POST "http://localhost:8080/DS_dev_01/public/tax-split-scenario/Gregs/save-adjuster".
send @ jquery-2.0.3.min.js:6
ajax @ jquery-2.0.3.min.js:6
(anonymous) @ Gregs:2251
dispatch @ jquery-2.0.3.min.js:5
y.handle @ jquery-2.0.3.min.js:5
jquery-2.0.3.min.js:6 [Violation] 'load' handler took 3445ms

Игнорировать время, указанное в конце, это время до того, как я нажму на окно оповещения. Я также жестко запрограммировал параметр данных «setting_payment».

Теперь сработало мое сообщение об ошибке, но я не сказал, в чем проблема.

...