Javascript AJAX Codeigniter-您没有选择要上载的文件(错误)-如何通过AJAX传递文件

Javascript AJAX Codeigniter-您没有选择要上载的文件(错误)-如何通过AJAX传递文件,javascript,php,jquery,ajax,codeigniter,Javascript,Php,Jquery,Ajax,Codeigniter,我试图通过AJAX调用和Codeigniter上传图像: 我的看法是: <?php echo form_open_multipart('upload/do_upload'); ?> <input type="file" name="userfile" id="userfile" size="20" /> <br /> <input type="submit"

我试图通过AJAX调用和Codeigniter上传图像:

我的看法是:

            <?php echo form_open_multipart('upload/do_upload'); ?>
            <input type="file" name="userfile" id="userfile" size="20" />
            <br />
            <input type="submit" value="upload" id="upload_file_1" />
            </form>
和我的控制器:

class Upload extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->helper(array('form', 'url'));
    }

    function index() {
        $this->load->view('upload_form', array('error' => ' '));
    }

    function do_upload() {
        $config['upload_path'] = './uploads/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '1000000';
        $config['max_width'] = '10240';
        $config['max_height'] = '7680';

        $this->load->library('upload', $config);
        if (!$this->upload->do_upload('userfile')) {                        
            $error = array('error' => $this->upload->display_errors());    
            echo "error!";
            echo "<pre>";
            print_r($error);
            echo "<pre/>";
        } else {
            echo "done!";
        }
    }

}
类上载扩展CI_控制器{
函数_u构造(){
父项::_构造();
$this->load->helper(数组('form','url');
}
函数索引(){
$this->load->view('upload_form',array('error'=>'');
}
函数do_upload(){
$config['upload_path']='./uploads/';
$config['allowed_types']='gif | jpg | png';
$config['max_size']='1000000';
$config['max_width']='10240';
$config['max_height']='7680';
$this->load->library('upload',$config);
如果(!$this->upload->do_upload('userfile')){
$error=array('error'=>$this->upload->display_errors());
回声“错误!”;
function frm_submit(){     
    var form = new FormData(document.getElementById('frmSample')); //frmSample is form id
            var file = document.getElementById('userfile').files[0]; //userfile file tag id
            if (file) {
                form.append('userfile', file);
            }
        $.ajax({
                url: 'path/to/upload/script',
                type: 'POST',
                xhr: function() {  // custom xhr
               //progressHandlingFunction to hangle file progress
                    var myXhr = $.ajaxSettings.xhr();
                    if (myXhr.upload) { // check if upload property exists
                        myXhr.upload.addEventListener('progress', progressHandlingFunction, false); // for handling the progress of the upload
                    }
                    return myXhr;
                },
                data: form,
                cache: false,
                contentType: false,  //must
                processData: false,  //must
                complete: function(XMLHttpRequest) {
                    var data = JSON.parse(XMLHttpRequest.responseText);
                    console.log(data);
                      console.log('complete');
                },
                error: function() {
                  console.log('error');
                }
           }).done(function() { 
                  console.log('Done Sending messages');    
            }).fail(function() {
            console.log('message sending failed');
            });
}//function frm_submit ends here
回声“;
function frm_submit(){     
    var form = new FormData(document.getElementById('frmSample')); //frmSample is form id
            var file = document.getElementById('userfile').files[0]; //userfile file tag id
            if (file) {
                form.append('userfile', file);
            }
        $.ajax({
                url: 'path/to/upload/script',
                type: 'POST',
                xhr: function() {  // custom xhr
               //progressHandlingFunction to hangle file progress
                    var myXhr = $.ajaxSettings.xhr();
                    if (myXhr.upload) { // check if upload property exists
                        myXhr.upload.addEventListener('progress', progressHandlingFunction, false); // for handling the progress of the upload
                    }
                    return myXhr;
                },
                data: form,
                cache: false,
                contentType: false,  //must
                processData: false,  //must
                complete: function(XMLHttpRequest) {
                    var data = JSON.parse(XMLHttpRequest.responseText);
                    console.log(data);
                      console.log('complete');
                },
                error: function() {
                  console.log('error');
                }
           }).done(function() { 
                  console.log('Done Sending messages');    
            }).fail(function() {
            console.log('message sending failed');
            });
}//function frm_submit ends here
打印错误($error); 回声“;
function frm_submit(){     
    var form = new FormData(document.getElementById('frmSample')); //frmSample is form id
            var file = document.getElementById('userfile').files[0]; //userfile file tag id
            if (file) {
                form.append('userfile', file);
            }
        $.ajax({
                url: 'path/to/upload/script',
                type: 'POST',
                xhr: function() {  // custom xhr
               //progressHandlingFunction to hangle file progress
                    var myXhr = $.ajaxSettings.xhr();
                    if (myXhr.upload) { // check if upload property exists
                        myXhr.upload.addEventListener('progress', progressHandlingFunction, false); // for handling the progress of the upload
                    }
                    return myXhr;
                },
                data: form,
                cache: false,
                contentType: false,  //must
                processData: false,  //must
                complete: function(XMLHttpRequest) {
                    var data = JSON.parse(XMLHttpRequest.responseText);
                    console.log(data);
                      console.log('complete');
                },
                error: function() {
                  console.log('error');
                }
           }).done(function() { 
                  console.log('Done Sending messages');    
            }).fail(function() {
            console.log('message sending failed');
            });
}//function frm_submit ends here
}否则{ 回声“完成!”;
function frm_submit(){     
    var form = new FormData(document.getElementById('frmSample')); //frmSample is form id
            var file = document.getElementById('userfile').files[0]; //userfile file tag id
            if (file) {
                form.append('userfile', file);
            }
        $.ajax({
                url: 'path/to/upload/script',
                type: 'POST',
                xhr: function() {  // custom xhr
               //progressHandlingFunction to hangle file progress
                    var myXhr = $.ajaxSettings.xhr();
                    if (myXhr.upload) { // check if upload property exists
                        myXhr.upload.addEventListener('progress', progressHandlingFunction, false); // for handling the progress of the upload
                    }
                    return myXhr;
                },
                data: form,
                cache: false,
                contentType: false,  //must
                processData: false,  //must
                complete: function(XMLHttpRequest) {
                    var data = JSON.parse(XMLHttpRequest.responseText);
                    console.log(data);
                      console.log('complete');
                },
                error: function() {
                  console.log('error');
                }
           }).done(function() { 
                  console.log('Done Sending messages');    
            }).fail(function() {
            console.log('message sending failed');
            });
}//function frm_submit ends here
} } }
但它给了我一个错误:“您并没有选择要上传的文件。”;如果没有AJAX,它可以正常工作,可能我的AJAX调用不正确!如果我做错了什么,你能告诉我吗


感谢

在我最近的项目中,我使用下面的代码使用jquery ajax异步上传带有formdata的文件, 但是我无法成功上传文件:jQuery的function(),所以我使用complete来处理服务器响应。您可以尝试成功:function()

您将在$\u文件变量中的$\u Post&file中接收数据

如果只想上传文件。明智地改变它

希望这对你有帮助

另请参见本教程:


我使用了这个javascript库 使用ajax实现文件上传-拖放+进度条,并返回可直接下载的相应文件图标或图像缩略图。很难让它完全工作和抽象,因此同一个例程处理多种类型的上传,每种上传都有自己的限制。 该链接将给出一些基本的示例代码,值得一看


pete

这些字段是从哪里获得的:-
secureuri
fileElementId
?您还必须使用XHR2通过Ajax上传文件。我在另一个示例中找到了它们!因此,如果fileElementId不是传递给控制器的正确选择,那么我可以选择什么来将文件传递给控制器?谢谢你必须使用uploadify上传文件。因为在AjaxUmair中无法传递这样的文件;所以除了Uplodify或者其他插件,我唯一可以使用AJAX的方法就是使用XHR?顺便说一句,我从来不知道我们不能使用AJAX上传文件。。。那很有趣。。。