【问题标题】:serialize post datatables form to laravel controller for saving将 post datatables 表单序列化到 laravel 控制器以进行保存
【发布时间】:2014-10-27 20:04:03
【问题描述】:

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

这是我的数据表:

values 的序列化数据表如下所示(如果您 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();

但这也会产生相同的结果(空警报)。知道可能出了什么问题吗?如何调试这个?一定是哪里出了问题……

【问题讨论】:

    标签: php jquery ajax laravel-4 datatables


    【解决方案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"
    

    【讨论】:

    • 对不起,我不知道我是怎么错过的。代码是对的,我忘了return 回复你说的。很好,谢谢:)
    猜你喜欢
    • 2015-02-14
    • 2020-10-19
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多