Javascript AJAX Codeigniter-您没有选择要上载的文件(错误)-如何通过AJAX传递文件
我试图通过AJAX调用和Codeigniter上传图像: 我的看法是: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"
<?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上传文件。。。那很有趣。。。