2014-10-27 66 views
0

我有一些datatables與某些輸入在某些列是可編輯的輸入。我想將編輯後的值保存在數據庫中。序列化發表datatables窗體laravel控制器保存

這是我的數據表:

enter image description here

從值序列化的數據表看起來是這樣的(如果你print_r($_POST)用於調試):

enter image description here

的JavaScript - 我發佈datatables通過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); 
    } 
} 

當代碼運行,我在javascript得到一個空alert()一次Ajax請求完成。

我想這個問題可能與數據庫事務相關的代碼,所以我嘗試註釋掉如下:

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

但是,這也產生同樣的結果(空警報)。任何想法可能是錯誤的?如何調試呢?某些地方肯定出錯了......

回答

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您的阿賈克斯電話:

dataType: "json" 
+0

對不起,我不知道我是如何錯過了。代碼是正確的,我忘了像你說的那樣「回覆」回覆。好,趕快,謝謝:) – Latheesan 2014-10-28 08:42:42