我想在CodeIgniter中使用jquery-ajax上传照片。首先,我想将文件传递给我的控制器,以便检查我的AJAX调用是否正常工作。 我的代码没有向控制器发布任何内容。我在这里发布我的代码,请告诉我我的错误
这是我的代码
jQuery和我对视图的输入在这里(profile_view.php)
<script type="text/javascript">
$(document).ready(function() {
$("#file1").on("change", (function() {
$("#showimage").fadeIn("slow").html('');
$("#showimage").fadeIn("slow").html('Plaese Wait...');
alert('hello');
$("#frm1").ajaxForm({
target: '#showimage',
success: function(response) {
alert(response);
},
error: function(err) {
alert(err);
}
}).submit();
}));
</script>
我的输入代码在这里
<div id="photoframe">
<form name='frm1' id="frm12" enctype="multipart/form-data" method="post" action="upload_photo">
<input type="file" name="file1" id="file1" style="visibility:hidden" />
</form>
<a style="color:white"><i class="fa fa-edit" id="img1">Edit Photo</i></a>
<div id="showimage" name='showimage'>
</div>
</div>
我的控制器在这里(upload_photo.php)
class Upload_photo extends CI_Controller {
function __construct() {
parent::__construct();
$this - > load - > helper(array('form', 'url'));
}
public
function index() {
$config['upload_path'] = '/user';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
if (isset($_POST['frm1'])) {
echo 'Image Uploaded';
echo "post".$_FILE['frm1'];
} else {
echo 'Image Upload Failed';
}
}
}
我的输出是:Image Upload Failed
答案 0 :(得分:0)
我认为您的请求存在问题,您还没有传递任何带有该请求的数据,您可以使用以下数据方法通过ajax传递数据: -
$.ajax({
url: "post.php",
data: {
id: 123
},
type: "GET",
dataType : "json",
success: function( json ) {
// Do your code here for success
},
error: function( xhr, status, errorThrown ) {
alert( "Sorry, there was a problem!" );
},
complete: function( xhr, status ) {
alert( "The request is complete!" );
}
});
并且您无法使用这些AJAX请求发送图像文件。
请更改您的PHP代码,如下所示: -
if (isset($_FILES['frm1'])) {
// Do your upload code here
}
else
{
echo 'Image Upload Failed';
}
答案 1 :(得分:0)
这是对非处理数据的ajax调用(在您的情况下为上传图像):
var form = $('frm12');
var formdata = false;
if (window.FormData){
formdata = new FormData(form[0]);
}
var formAction = form.attr('action');
$.ajax({
url: formAction,
data : formdata ? formdata : form.serialize(),
cache : false,
contentType : false,
processData : false,
dataType: "json",
type : 'POST',
resetForm: true,
})
.done(function(data) {
//returned response
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
请注意&#34; processData:false&#34;,这需要tel ajax不作为标准数据传输。
&#34;默认情况下,作为对象传入数据选项的数据(技术上,不是字符串)将被处理并转换为查询字符串,适合默认的内容类型&#34;应用程序/ x-WWW窗体-urlencoded&#34 ;.如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false。&#34;来自http://api.jquery.com/jquery.ajax/。你可以在这里找到关于jquery.ajax设置的解释。
值得一提的是,如果你想在将数据发送到服务器之前进行一些检查(我重新考虑这个),你也可以使用&#34; beforeSend:beforeSubmit,&#34;设置&#34; beforeSubmt&#34;是一个可以实现所有必要检查的函数(例如允许的文件类型,允许的文件大小等等)。如果出现故障,则不会上传数据。