如何从通过ajax传递的HTTP请求中的对象数组中提取laravel控制器中的数据

时间:2016-06-18 10:25:42

标签: php arrays ajax laravel httprequest

我正在开发laravel 5.2中的POS系统。从我的销售页面发送一个包含1个bill-info对象和1个产品列表对象数组的数组。我的控制器正在接收数据,但我无法弄清楚如何在我的控制器中提取它们。我已经完成了laravel文档和php。

我试过了。

$data = $request->all();
$billinfo = $data[0]->total;
$productlist=$data[1];

我也试过

$billinfo = $data[0]->object->total;

我也试过

$billinfo = $data[0]->object[0]->total;

我也试过

$billinfo = $data[0]->bill->total;

如果我再次将请求发送到这样的视图:

$data = $request->all();
return json_encode($data);

然后在consol中打印响应。该consol给出以下输出:

Object {id: Array[2]}
>id:
>Array[2]
  0:Object
    card_number:"0"
    customer_id:"0"
    date:"06/18/2016"
    discount:"0"
    grandtotal:"563.5"
    payment_method:"cash"
    seller_id:""
    tax:"15"
    total:"490"
    __proto__:Object
  1:Array[2]
    0:Object
      stock_id:"5"
      subtotal:"244"
      unit:"2"
      unit_price:"122"
      __proto__:Object
    1:Object
      stock_id:"4"
      subtotal:"246"
      unit:"2"
      unit_price:"123"

我的ajax发送功能是

function ajaxsave(obj)
  {  
    var token=$('input[name=_token]').val();
    var baseUrl=document.getElementById("baseUrl").value;
    var url=baseUrl+"/sales/savecart";
    var id=obj;
    $.ajax({
      type: "GET",
      headers: {'X-CSRF-TOKEN': token},
      url:url,
      data: {id:id},
      datatype:'json',
      success: function(data) {

                var returndata =JSON.parse(data);
                console.log(returndata);
}
  });



  }

我正在努力学习laravel。这是我的第一个项目。请帮助!!!

我认为如果我返回var_dump($ request-> all())

,这就是网络XHR的输出
 array(1) {
  ["id"]=>
  array(2) {
    [0]=>
    array(9) {
      ["customer_id"]=>
      string(1) "0"
      ["seller_id"]=>
      string(0) ""
      ["date"]=>
      string(10) "06/18/2016"
      ["payment_method"]=>
      string(4) "cash"
      ["card_number"]=>
      string(1) "0"
      ["total"]=>
      string(3) "244"
      ["discount"]=>
      string(1) "0"
      ["tax"]=>
      string(2) "15"
      ["grandtotal"]=>
      string(5) "280.6"
    }
    [1]=>
    array(1) {
      [0]=>
      array(4) {
        ["stock_id"]=>
        string(1) "5"
        ["unit"]=>
        string(1) "2"
        ["unit_price"]=>
        string(3) "122"
        ["subtotal"]=>
        string(3) "244"
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

Ahdaf,对于Julqas来说,需要在发送之前查看数据转储,即您的JSON数据是如何格式化的。也就是说,我怀疑你的问题是一个JSON格式化问题,即你可能正在向Laravel发送一个数组,例如您发送的是var billinfo = ["id", [... data]]; Laravel将假设的原始数据。

你可以通过PHP GET等提取它,这样可以正常工作,但是如果你期待Laravel魔法那么你需要确保你发送Laravel JSON,例如var billing = {id: 1, record: {id:1, name: 'bob'};即JSON。 Laravel将解码这个罚款和$ request-> all()将正常工作。此外,如果您需要发送一个JS数据数组,那么var billingInfo = {id:1,arrayOfData:[...]}

P.S。如果获取AJAX请求,Laravel将返回一个JSON对象,因此console.log(...)将显示JSON,但这并不意味着您正在发送格式正确的JSON。

工作格式示例

var billingInfo = {id: 1, email: "person@msn.com", name: "Bob", card: "4448"}