2015-02-11 164 views
0

我正在申请一个酒吧。Codeigniter和AJAX错误

当文档准备就绪时,应用程序通过执行get_beers_from_customer();将“啤酒表单按钮”填入#beer_output。 然后酒保通过点击“啤酒表单按钮”来供应饮料。

每次调酒师点击“啤酒表单按钮”,就会发出一个ajax调用并发送给codeigniter控制器,在那里啤酒被删除,并响应ajax和啤酒,直到没有订单留下来服务。

一旦没有啤酒,订单将通过我的控制器的另一个功能进行处理:process_order_when_all_drinks_served($user_id)

我正在使用authorize.net作为支付网关。

问题是,当我只订购1份啤酒时,如果我订购2份啤酒,一切正常。 process_order_when_all_drinks_served($user_id)输出错误试图获取非对象的属性。

这里是具体发生错误的地方if($response->response_code=="1")显然它没有给出回应。阿贾克斯发布,并没有回报任何错误。我不知道发生了什么。如果有帮助,我可以给你链接并订购一杯。

这里是AJAX功能

$(document).ready(function(){ 

    get_beers_from_customer(); 

    function get_beers_from_customer() 
    { 
     //form variables 
     var user_id = "<?php echo $this->session->userdata('user_id'); ?>" ; 
     var formData = {user_id:user_id}; 
     ajax_update_content_when_page_is_loaded_beers(formData); 
    } 

    function ajax_update_content_when_page_is_loaded_beers(formData) 
    { 
     $.ajax({ 
      url  : '<?php echo base_url()."index.php/bartender/bartender_serve_beers"; ?>', 
      async : false, 
      type : "POST", 
      cache : false, 
      data : formData, 
      dataType: "html",                
      success : function(data) 
      { 
       alert($.trim(data)); 
       $('#beer_output').html($.trim(data)); 
       $('#beer_output').trigger('create');              }, 
       error: function (jqXHR, textStatus, errorThrown) 
       { 
        $('#server_message_error_jqXHR').html("here is the jqXHR"+jqXHR); 
        $('#server_message_error_textStatus').html("here is the textStatus "+textStatus); 
        $('#server_message_error_errorThrown').html("here is the errorThrown"+errorThrown); 
       }             
      });  

    } 

}); 

once the form is submitted 
$(".beer").on("submit",function(event) 
{ 
    //variables 
    var delete_beer = $(this).find(".delete_beer").val(); 
    var beer_id  = $(this).find(".beer_id").val(); 
    var user_id  ="<?php echo $this->session->userdata('user_id');?>"; 

    // alert("delete_beer="+delete_beer+"beer_name=" +beer_name +"beer_id="+beer_id); 

    //form variables 
    var formData = {delete_beer:delete_beer,beer_id:beer_id,user_id:user_id}; //Array 
    submit_ajax_form_beers(formData); 
    //get_beers_from_customer(); 
}); 

function submit_ajax_form_beers(formData) 
{ 
    $.ajax({ 


     url  : '<?php echo base_url()."index.php?/bartender/bartender_serve_beers"; ?>', 
     async : false, 
     type : "POST", 
     cache : false, 
     data : formData, 
     dataType: "html",                
     success : function(data){ 

      $('#beer_output').trigger('create'); 
      console.log($(this).data(formData));                                                                                                                                                                                                                                                    

     }, 
     error: function (jqXHR, textStatus, errorThrown){ 

      $('#server_message_error_jqXHR').html("here is the jqXHR"+jqXHR); 
      $('#server_message_error_textStatus').html("here is the textStatus "+textStatus); 
      $('#server_message_error_errorThrown').html("here is the errorThrown"+errorThrown); 
     } 

    });  
} 

笨控制器

public function process_order_when_all_drinks_served($user_id) 
{ 
    $bartender_id = $this->session->userdata('bartender_id'); 

    //load model 
    $this->load->model('authorizenet_model'); 

    //finalize order with authorizenet prior authorize and capture 
    $response = $this->authorizenet_model->priorauthcapture($user_id); 

    print_r($response); 

    if($response->response_code=="1") 
    { 
     //stores the order_line before it is deleted 
     $this->bartender_model->store_past_order_line($user_id); 

     //deletes customer from order line if all beers and mixed drinks have been served 
     $this->bartender_model->delete_customer_from_order_line($user_id);                     

     //order was successful 
     $response_message= '<center><strong>'.$response->response_reason_text.'</strong></center>'; 
    } 
    else 
    { 
     //store userdata in unprocess orders 
     $this->bartender_model->store_unprocessed_order($user_id,$bartender_id); 

     //then erases it from order_line 
     $this->bartender_model->delete_customer_from_order_line($user_id); 

     $response_message= '<center><strong style="color:red;">'."There was a problem with the order.<br/>" 
     .$response->response_reason_text.$response->error_message.'</strong></center>'; 
    } 

    return $response_message; 
} 


public function bartender_serve_beers(){ 
    //checks if there are any drinks left to process order 


    if(isset($_POST['delete_beer']) && isset($_POST['user_id']) 
    { 
     $user_id = $_POST['user_id']; 
     $beer_id = $_POST['beer_id']; 

     //then it is deleted from the paid beers 
     $this->bartender_model->delete_beers($user_id,$beer_id); 

     //checks if there are any drinks left to be processed 
     $checks_any_drinks_left= $this->bartender_model->checks_if_mixed_drinks_beers_left_to_process_order($user_id); 

     if($checks_any_drinks_left=="1") 
     { 
      $user_id = $this->session->userdata('user_id'); 

      $proccess_drinks_message= $this->process_order_when_all_drinks_served($user_id); 

      //outputs the response message to bartender 
      echo $proccess_drinks_message;                   
     } 
     else 
     { 
      $user_id = $this->session->userdata('user_id'); 

      //continues outputting beers                              
      echo $beers_served_button = $this->bartender_model->output_beers_served_button($user_id); 
     } 

    } 
    else 
    {               
     $user_id = $this->session->userdata('user_id'); 

     echo $beers_served_button = $this->bartender_model->output_beers_served_button($user_id);  
    } 

}  
+0

我认为你的ajax中的'url'属性并不指向你的控制器在代码片段中的动作! – SaidbakR 2015-02-11 19:46:07

+0

你的应用程序只有一个用户吗?如果是的话,尝试创建另一个,并确保其ID为'2'并再次测试订单2. – SaidbakR 2015-02-11 19:55:30

回答

0

我没有看到nesessity有会话变量的输出到前端。 你也可以在下一个控制器中使用它。更好的办法是检查下一个控制器是否仍然存在。里面还有像 添加一个检查:

//... 
else if ($this->session->userdata('user_id') != false && !empty($this->session->userdata('user_id'))) { 
    $user_id = $this->session->userdata('user_id'); 
    //continues outputting beers                              
    echo $beers_served_button = $this->bartender_model->output_beers_served_button($user_id); 
}//...rest of the code 

此外,您检查$_POST['delete_beer']比分配$_POST['beer_id']$beer_id变量。虽然我看不到你通过AJAX传递了任何啤酒变量。据我所知,你只传递会话输出。

+0

我检查了$ user_id变量,它不是空的。我稍后将在此处发布链接。也许这样会更容易。 – 2015-02-11 20:56:29

+0

这里是链接http://www.barexpress.club/index.php?/bartender/customer_pick_up_drinks用户名:a9772108密码:a7272321然后点击拿起。然后点击查看饮品。 – 2015-02-11 22:02:03