序列化后数据表格到laravel控制器以进行保存

时间:2014-10-27 20:04:04

标签: php jquery ajax laravel-4 datatables

我有一些数据表,在某些列中有一些可编辑的输入。我想将编辑后的值保存在db。

这是我的数据表:

enter image description here

来自值的序列化数据表如下所示(如果您print_r($_POST)进行调试):

enter image description here

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();

但这也会产生相同的结果(空警报)。知道什么可能是错的吗?怎么调试这个?某处某事肯定会出错...

1 个答案:

答案 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"