Codeigniter and AJAX error


Codeigniter and AJAX error

我正在为一个酒吧申请。

当文档准备好时,应用程序通过执行get_beers_from_customer();来用"啤酒表单按钮"填充#beer_output。然后,调酒师通过点击"啤酒表格按钮"来提供饮料。

每次酒保点击"啤酒表单按钮"时,都会发出一个ajax调用,并将其发送到codeigniter控制器,在那里删除啤酒,并用剩下的啤酒回复ajax,直到没有剩下的订单了。

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

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

问题是,当我只点了一杯啤酒,但如果我点了两杯啤酒,一切都很好。process_order_when_all_drinks_served($user_id)输出错误尝试获取非对象的属性

这里是错误发生的具体位置if($response->response_code=="1"),显然它没有给出响应。ajax正在发布,并且没有返回任何错误。我不知道发生了什么。如果有帮助的话,我可以给你链接并点一杯饮料。

以下是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);       
    }
}       

我不认为有必要将会话变量输出到前端。下一个控制器中也会有它。最好是检查下一个控制器,如果它仍然存在的话。在其他内容中添加一个签入,如:

//...
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传递了任何beer变量。据我所见,您只传递会话输出。