簡體   English   中英

Codeigniter 3 - Ajax文件上傳(您沒有選擇要上傳的文件)

[英]Codeigniter 3 - Ajax File Upload (You did not select a file to upload)

控制器:

function post()
{
    if(!$this->input->is_ajax_request())
    {
        show_404();
        exit;
    }

    $data['result'] = false;

    $config['upload_path']          = base_url().'userfiles/customer';
    $config['allowed_types']        = 'pdf';
    $config['max_size']             = 100000;

    $this->load->library('upload', $config);

    $file = $this->input->post('userfile');

    if ( ! $this->upload->do_upload($file))
    {
        $data['result'] = true;
        $error = array('error' => $this->upload->display_errors());

        $data['error'] = $error;
}
    else
    {
        $data['result'] = true;
        $data_upload = array('upload_data' => $this->upload->data());

        $data['success'] = $data_upload;
    }

    echo json_encode($data);
}

視圖:

<div class="form">
    <div class="form-group">
        <label class="form-label" for="package">Package :</label>
        <select class="package form-control" id="package" name="package">
            <option value="none">Please select..</option>
            <?php foreach($package as $row) { ?>
                <option value="<?php echo $row['id_order_package'] ?>"><?php echo $row['name'] ?></option>
            <?php } ?>
        </select>
        <div class="error" id="msg_package"></div>
    </div>
    <div class="form-group">
        <label class="form-label" for="price">Price ( Rp ) :</label>
        <input type="text" class="form-control" name="price" id="price" placeholder="" disabled>
        <div class="error" id="msg_price"></div>
    </div>
    <div class="form-group">
        <label class="form-label" for="days">Days :</label>
        <input type="text" class="form-control" name="days" id="days" placeholder="" disabled>
        <div class="error" id="msg_days"></div>
    </div>
    <div class="form-group">
        <label class="form-label" for="userfile">File :</label>
        <input type="file" id="userfile" name="userfile" class="form-control">
        <div class="error" id="msg_userfile"></div>
    </div>
    <div class="form-group">
        <label class="form-label" for="description">Description :</label>
        <textarea class="form-control" rows="5" name="description" id="description"></textarea>
        <div class="error" id="msg_description"></div>
    </div>
    <div class="form-group center">
        <div class="btn btn-primary">ORDER</div>
    </div>
</div>

使用Javascript:

$('.btn').click(function(e){
        $('#msg_package').html(' ');
        $('#msg_userfile').html(' ');
        $('#msg_description').html(' ');

        if($('#package').val() == 'none') {
            $('#msg_package').html('Please select package');
        } else if($('#userfile').val() == '') {
            $('#msg_userfile').html('This field is required');
        } else if($('#description').val() == '') {
            $('#msg_description').html('This field is required');
        } else {

            $.ajax({
                url     : '<?php echo base_url() ?>account_order/add/post',
                type    : 'POST',
                dataType: 'json',
                mimeType:"multipart/form-data",
                processData: false,
                data    : { userfile: $('#userfile')[0].files , price: $('#price').val() , days: $('#days').val() },
                success: function( data ) {

                       if(!data['result']){

                       }else{
                           alert(data['error']);
                       }
                }
            });
        }
    });

但是,我得到一個錯誤

{"result":true,"error":{"error":"<p>You did not select a file to upload.<\/p>"}}

我試圖從ajax發布數據和文件,但它不起作用。 我的問題是如何解決這個錯誤? 為什么控制器無法讀取userfile的內容?

謝謝

嘗試將您的輸入放在表單中並提供表單id ='your_form_id'然后在javascript中通過這種方式發送您的數據:

var data = new FormData(document.getElementById("your_form_id"));

然后替換這行data : { userfile: $('#userfile')[0].files , price: $('#price').val() , days: $('#days').val() },

有這些data: data,

也可以在data: data,后設置data: data, ,:

async: false,
processData: false,
contentType: false,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM