сериализовать форму записей данных в контроллер laravel для сохранения

У меня есть таблицы данных с некоторыми входными данными в определенных столбцах, которые можно редактировать. Я хочу сохранить отредактированные значения в БД.

Это мои данные:

введите описание изображения здесь

Сериализованные таблицы данных из значений выглядят так (если вы print_r($_POST) для отладки):

введите описание изображения здесь

Javascript — Я публикую форму данных через ajax-запрос в моем методе контроллера api laravel следующим образом:

// Serialize the datatable table into post string
var poDetailUpdates = create_po_details_table.$('input').serialize();

// Call po api to save changes
$.ajax({
type: "POST",
data: poDetailUpdates,
url: '/api/po/update-create-lines/',
complete: function(response) {
if (response.status === 200) {
alert(response.responseText); // success
} else {
alert(response.responseText); // error
}
}
});

PHP — вот как я обрабатываю свою форму сообщения в laravel:

public function postUpdateCreateLines() {
DB::beginTransaction();
try {
foreach ($_POST as $column_name => $values) {
foreach ($values as $line_id => $new_value) {
DB::table('purchase_order_details')
->where('id', '=', $line_id)
->update(array($column_name => $new_value));
}
}
DB::commit();
Response::make('Purchase order details updated', 200);
} catch (Exception $ex) {
DB::rollback();
Response::make('Purchase order details not updated - '. $ex->getMessage(), 500);
}
}

Когда код запускается, я получаю пустой alert() в JavaScript, как только запрос Ajax завершается.

Я думал, что проблема может быть связана с кодом транзакции БД, поэтому я попытался закомментировать следующее:

// DB::beginTransaction();
// DB::commit();
// DB::rollback();

Но это также дает тот же результат (пустое предупреждение). Есть идеи, что может быть не так? как это отладить? Что-то должно быть не так где-то …

0

Решение

Ваш postUpdateCreateLines() метод на самом деле ничего не возвращает; вы делаете ответ, но вам нужно return Это:

return Response::make('Purchase order details updated', 200);

Однако есть и другие улучшения, которые вы можете сделать. Лучше всего вернуть JSON-ответ на ваш $.ajax позвоните, а затем положитесь на jQuery’s ajax .done а также .fail обработчики, чтобы иметь дело с ответом надлежащим образом (вместо того, чтобы использовать complete):

return Response::json(
['status' => 'success',
'msg'    => 'Purchase order details updated']
, 200)

…и добавьте ответ dataType на ваш вызов ajax:

dataType: "json"
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]