【问题标题】:Associative array not an array when passed to controller thru AJAX通过 AJAX 传递给控制器​​时,关联数组不是数组
【发布时间】:2016-02-10 10:00:00
【问题描述】:

我正在尝试通过 AJAX 将此数组 var data_array 传递到我的控制器中

这是我使用alert(JSON.stringify(data_array));var data_array的值

这是我的 AJAX 方法

var project_details = $.extend({}, data_array);

    $.ajax({
       type: "POST",
       url: "<?php echo base_url('PPMP_controller/submitPPMP'); ?>",
       data: { data_array : $.param(project_details) },
       dataType: 'json',
       success: function(data) {
           alert('PPMP submission success!');
           alert(data);
       },
       error: function(errorw) {
           console.log(errorw);
       }
   });       

这是我的 PPMP_controller

public function submitPPMP(){
    $data_array = $this->input->post('data_array');
    $value = $this->PPMP_model->submitPPMP($data_array);
    echo json_encode($value);
} 

这是我的模特

function submitPPMP($data_array){
    $date_format = 'DATE_W3C';

    $date_submitted = standard_date($date_format);
    $data = array(
        'user_id' => 1,
        'date_submitted' => $date_submitted,
        'first_lvl_status' => 0,
        'second_lvl_status' => 0,
        'third_lvl_status' => 0,
        'fourth_lvl_status' => 0,
        'submitted' => 1
    );
    $this->db->insert('project', $data);
    $id = $this->db->insert_id();

    if(is_array($data_array) || is_object($data_array)){
        return "yes";
        foreach($data_array as $object){
            $project_details = array(
                'project_id' => $id,
                'supply_id' => $object->supply_id,
                'supply_description' => $object->supply_description,
                'quantity' => $object->quantity,
                'price' => $object->price,
                'jan' => $object->jan,
                'feb' => $object->feb,
                'mar' => $object->mar,
                'apr' => $object->apr,
                'may' => $object->may,
                'jun' => $object->jun,
                'jul' => $object->jul,
                'aug' => $object->aug,
                'sep' => $object->sep,
                'oct' => $object->oct,
                'nov' => $object->nov,
                'dec' => $object->dec
            );
            $this->db->insert('project_details', $project_details);
        }
    }
    else{
        return "no";
    }
    return $this->db->last_query();
}

但是,从控制器传递到模型的数组不是数组,因为它没有通过if(is_array($data_array) || is_object($data_array)) 行,而是转到else 条件和return "no"

可能是什么原因导致这个数组没有从控制器传递到模型。感谢您的帮助。我使用 Codeigniter 3.0 作为 MVC 框架。

【问题讨论】:

    标签: javascript php jquery arrays ajax


    【解决方案1】:

    您将 json 传递给您的模型而不是数组,当涉及到您的模型时,它应该是,

    尝试var_dump($data_array)检查其数据类型,即jsonobjectarray

    $data_array = json_decode($data_array); // to get object    
    $data_array = json_decode($data_array,true); // to get array
    

    你的PPMP_controller应该是

    public function submitPPMP(){
        $data_array = $this->input->post('data_array');
        $data_array = json_decode($data_array); 
        $value = $this->PPMP_model->submitPPMP($data_array);
        echo json_encode($value);
    } 
    

    【讨论】:

    • 我尝试将$data_array = json_decode($data_array); 放在模型和控制器上,但我的模型仍然是return "no"
    • 尝试var_dump($data_array) 检查传递给模型或控制器的数据类型?
    • 我应该把var_dump($data_array); 放在哪里,因为我在做$data_array = json_decode($data_array); 之后把它放在哪里没有任何反应。可能是因为 AJAX 请求?
    • 转储后添加骰子并检查网络中的 ajax 响应
    • 我在模型中的 var_dump($data_array); 之后添加了一个 die();,但没有任何反应,也没有 AJAX 响应,但我的控制台中有一个对象,当我单击时,我会转到 error: function(errorw)我的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 2011-12-21
    • 1970-01-01
    • 2015-09-18
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多