我有一些数据表,在某些列中有一些可编辑的输入。我想将编辑后的值保存在db。
中这是我的数据表:
来自值的序列化数据表如下所示(如果您print_r($_POST)
进行调试):
javascript - 我通过ajax请求将数据表格发布到我的laravel api控制器方法,如下所示:
// 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);
}
}
当代码运行时,一旦ajax请求完成,我在javascript中得到一个空的alert()
。
我认为问题可能与数据库事务相关的代码有关,所以我尝试评论以下内容:
// DB::beginTransaction();
// DB::commit();
// DB::rollback();
但这也会产生相同的结果(空警报)。知道什么可能是错的吗?怎么调试这个?某处某事肯定会出错...
答案 0 :(得分:1)
您的postUpdateCreateLines()
方法实际上没有返回任何内容;你正在做出回应,但你需要return
:
return Response::make('Purchase order details updated', 200);
但是,您可以进行一些其他改进。最好将JSON响应返回到$.ajax
调用,然后依靠jQuery的ajax .done
和.fail
处理程序来适当地处理响应(而不是使用complete
):
return Response::json(
['status' => 'success',
'msg' => 'Purchase order details updated']
, 200)
...并将响应dataType
添加到您的ajax调用中:
dataType: "json"