У меня есть кнопка в моем клинке:
<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».
Теперь сработало мое сообщение об ошибке, но я не сказал, в чем проблема.