2014-12-05 45 views
0

我试图将一些存储在Javascript数组中的数据传递给服务器进行数据库处理。我正在使用codeignier。在Codeigniter中使用JSON将数据传递给服务器

JavaScript数组(unitdata_set): -

[{"unit_id":"13","unit_title":"Testsdsdf","unit_max_occupancy":"3","unit_no":"1","unit_no_adults":"1","unit_no_children":"1","unit_no_extrabed":0,"unit_mealtype":"Full Board","unit_fullboard_adult":"6000.00","unit_fullboard_child":"4000.00","unit_halfboard_adult":"1800.00","unit_halfboard_child":"1200.00","room_total":"81600.00","all_room_price":"81600.00","extra_bed_price":"4.00","meal_price":22000,"saving_amount":16320,"discounted_bedroom_price":65280},{"unit_id":"14","unit_title":"Res2","unit_max_occupancy":"12","unit_no":"0","unit_no_adults":"0","unit_no_children":"0","unit_no_extrabed":0,"unit_mealtype":"Bed and Breakfast","unit_fullboard_adult":"9000.00","unit_fullboard_child":"7000.00","unit_halfboard_adult":"7000.00","unit_halfboard_child":"5000.00","room_total":"86400.00","all_room_price":"0.00","extra_bed_price":"","meal_price":0,"saving_amount":0,"discounted_bedroom_price":0}] 

Ajax的功能: -

function sendBooking(){ 

      var boooking_url = "<?php echo site_url('tempbooking/addBooking'); ?>"; 
      var data_booking = ''; 
      data_booking = JSON.stringify(unitdata_set); 

      $.post(boooking_url,{ 

      'booking_data[]':data_booking 

      },function(data){ 
      console.log(data); 

      }); 

     } 

我的控制器功能,其用于接收JSON数据: -

function addBooking(){ 
      $booking_data=$this->input->post('booking_data'); 

      foreach ($booking_data as $booking) { 

          $booking_attr = json_decode($booking); 
         echo $booking_attr->unit_id . " " . $booking_attr->unit_title; 
         //echo $booking_attr['unit_id'] . " " . $booking_attr['unit_title']; 
       } 


     } 

的错误信息,我得到: -

<h4>A PHP Error was encountered</h4> 

<p>Severity: Notice</p> 
<p>Message: Trying to get property of non-object</p> 
<p>Filename: controllers/tempbooking.php</p> 
<p>Line Number: 156</p> 

</div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> 

<h4>A PHP Error was encountered</h4> 

<p>Severity: Notice</p> 
<p>Message: Trying to get property of non-object</p> 
<p>Filename: controllers/tempbooking.php</p> 
<p>Line Number: 156</p> 

</div> 

的print_r: -

print_r($this->input->post('booking_data')); 

Array 
(
    [0] => [{"unit_id":"13","unit_title":"Testsdsdf","unit_max_occupancy":"3","unit_no":"1","unit_no_adults":"1","unit_no_children":"1","unit_no_extrabed":0,"unit_mealtype":"Full Board","unit_fullboard_adult":"6000.00","unit_fullboard_child":"4000.00","unit_halfboard_adult":"1800.00","unit_halfboard_child":"1200.00","room_total":"81600.00","all_room_price":"81600.00","extra_bed_price":"4.00","meal_price":22000,"saving_amount":16320,"discounted_bedroom_price":65280},{"unit_id":"14","unit_title":"Res2","unit_max_occupancy":"12","unit_no":"0","unit_no_adults":"0","unit_no_children":"0","unit_no_extrabed":0,"unit_mealtype":"Bed and Breakfast","unit_fullboard_adult":"9000.00","unit_fullboard_child":"7000.00","unit_halfboard_adult":"7000.00","unit_halfboard_child":"5000.00","room_total":"86400.00","all_room_price":"0.00","extra_bed_price":"","meal_price":0,"saving_amount":0,"discounted_bedroom_price":0}] 
) 

回答

0

也许是因为你的JSON对象是一个数组?

function addBooking(){ 
    $booking_data=$this->input->post('booking_data'); 

    foreach ($booking_data as $booking) { 
     //NEW: 
     $booking_attr = json_decode($booking[0]); 

     echo $booking_attr->unit_id . " " . $booking_attr->unit_title; 
    } 
} 
+0

无法做到这一点,因为我使用数组来推动数据值。 'unitdata_set.push({unit_id:test.resunit_details [i] .ReservationUnitID, unit_title:test.resunit_details [i] .ResUnitTitle, unit_max_occupancy:test.resunit_details [i]。MaxOccupancy, unit_no:0,unit_no_adults:0,unit_no_adults:0,unit_no_children:0});' – user2182143 2014-12-05 21:04:12

+0

我编辑了我的答案。 – Guillaume 2014-12-05 22:35:47

+0

这仍然给我错误。 '消息:为foreach()提供的无效参数' – user2182143 2014-12-06 04:26:16

0

试图改变自己的控制器

function addBooking() 
{ 
    $booking_data=json_decode($this->input->post('booking_data')); 
    foreach ($booking_data as $booking) 
    { 
     $booking_attr = ($booking); 
     echo $booking_attr->unit_id . " " . $booking_attr->unit_title; 
     //echo $booking_attr['unit_id'] . " " . $booking_attr['unit_title']; 
    } 
} 

并改变这样

你的JavaScript代码:

[ {JSON} ] 

尽量使你访问JSON数组中修改你的PHP函数

function sendBooking() 
{ 
     var boooking_url = "<?php echo site_url('tempbooking/addBooking'); ?>"; 
     var data_booking = ''; 
     data_booking = (unitdata_set); 

     $.post(boooking_url,{ 

     'booking_data':data_booking 

     },function(data){ 
     console.log(data); 

     }); 

    } 
+0

仍然无法正常工作。我收到这个错误。 '

甲PHP错误遇到

严重性:警告

消息:json_decode()预计参数1是字符串,数组给定

文件名:控制器/ tempbooking.php

行号:152

A PHP Error was encountered

Severity: Warning

Message: Invalid argument supplied for foreach()

Filename: controllers/tempbooking.php

Line Number: 154

' – user2182143 2014-12-05 21:01:51

+0

在控制器功能的开始处输出$ this-> input-> post('booking_data')。 – 2014-12-05 22:07:00

+0

''{“unit_id”:“13”,“unit_title”:“Testsdsdf”,“unit_max_occupancy”:“3”,“unit_no”:“1”,“unit_no_adults”:“1”,“unit_no_children”:“1 “unit_mealtype”:“半膳”,“unit_fullboard_adult”:“6000.00”,“unit_fullboard_child”:“4000.00”,“unit_halfboard_adult”:“1800.00”,“unit_halfboard_child”:“1200.00”,“ room_total“:”81600.00“,”all_room_price“:”81600.00“,”extra_bed_price“:”4.00“,”meal_price“:6600,”saving_amount“:16320,”discounted_bedroom_price“:65280},' – user2182143 2014-12-06 03:44:11

0

F或者某种原因,json_decode不能解码包含对象的数组。如果您使用javascript数组将它传递给服务器端/ php,请首先将您的数组添加到对象中。请按照以下步骤完成此操作。

  1. 请将您的数组添加到对象。如下: -

    var unitdata_set = []; 
    
    var obj_userbooking_data = {"bookings":unitdata_set}; //Added the above array into a new object and passed it to the server 
    
  2. 确保JSON.stringify对象。

    data_booking = JSON.stringify(obj_userbooking_data);

所以功能变得

function sendBooking(){ 


        var boooking_url = "<?php echo site_url('booking/addBooking'); ?>"; 
        var data_booking = ''; 
        data_booking = JSON.stringify(obj_userbooking_data); 

        $.post(boooking_url,{ 

         'booking_data':data_booking 

        },function(data){ 
          console.log(data); 

        }); 



       } 
  • 使用json_decode到被转换成JSON字符串,在客户端侧透过JSON.stringify对象进行解码。因此,您的服务器端/ PHP /笨控制器功能变为: -

    function addBooking(){ 
         $booking_data=$this->input->post('booking_data'); 
         $booking_data=json_decode($booking_data,true); 
         echo 'Your Data: ' . $booking_data[0]['unit_id']; 
    } 
    
  • 相关问题