小妹请教JQuery ajaxfileupload文件上传的问题!
我写了一个JQuery ajaxfileupload的例子!
各位师哥帮我看看哪里不对!为什么打印不出来文件大小!总打印[Object Error]
Jquery_upload.html
<html>
<head>
<title>JQuery Upload Ajax学习</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="ajaxfileupload.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="ajaxfileupload.js"></script>
<script language="javascript">
function ajaxFileUpload()
{
$("#loading")
.ajaxStart(function(){
$(this).show();
})
.ajaxComplete(function(){
$(this).hide();
});
$.ajaxFileUpload
(
{
url:'Jquery_validate.php',
secureuri:false,
fileElementId:'picfile',
dataType: 'json',
success: function (data, status)
{
if(typeof(data.error) != 'undefined')
{
if(data.error != '')
{
alert(data.error);
}else
{
alert(data.msg);
}
}
},
error: function (data, status, e)
{
alert(e);
}
}
)
return false;
}
</script>
</head>
<body>
<!--上传表单,指定target属性为浮动框架iframe1-->
<form action="upload.php" method="post" enctype="multipart/form-data" name="upload_img">
选择要上传的图片:<input type="file" name="image" id="picfile" name="picfile" onchange="ajaxFileUpload()"><br/>
<input type="submit" value="上传图片" >
<div id="loading" ></div>
</form>
<!--显示提示信息的层-->
</body>
</html>
Jquery_validate.php
<?php
$fileElementName = 'picfile';
echo $_FILES[$fileElementName]['size'];
?>
[解决办法]
<?php $fileElementName = 'image'; echo $_FILES[$fileElementName]['size']; ?>
[解决办法]
ajax是不能上传文件的,因此你的onchange="ajaxFileUpload()"是得不到回应的
如果你要用ajax,只能提交了后通过ajax得到
提交按钮
<input onclick="startProgress(); return true;" type="submit" value="上传"/>
顺便回答你上一帖某位同志的问题。
startProgress(); 是通过设定定时发送查询得到结果的。
php制作实时上传进度就是使用这方法,有兴趣了解的话看
http://www.ibm.com/developerworks/cn/opensource/os-php-v525/
PHP V5.2 中的新增功能,第 5 部分: 跟踪文件上传进度
如果你要在客户端得到文件大小可以使用
<html><head><title></title><script type="text/javascript"> function getFileSize(filePath) { var image=new Image(); image.dynsrc=filePath; alert(image.fileSize); }</head></script> <body> <INPUT TYPE="file" NAME="file" SIZE="30" onchange="getFileSize(this.value)"> </body></html>
[解决办法]
to luojxun:
ajax是不能上传文件.
但是ajaxfileupload完成了模拟iframe表单提交的过程,所以可以上传文件.
另外,你给的哪个链接,也是利用iframe下的表单提交完成的上传,只不过利用了php5.2的新特性而已.
to楼主:
我需要说明的是,调用ajaxFileUpload()函数的时候,其实文件已经被上传到服务器了,尽管你没有接收,如果你再点击提交,就属于二次提交,呵呵.当然,这样做也可以.
帮你修改一下,其实ajaxfileupload需要返回json格式.
<?php//返回文件大小,返回错误为空,让前台显示文件大小$fileElementName = 'image'; $size = $_FILES[$fileElementName]['size'];echo "{msg: '$size',error: ''}";?>
[解决办法]
“也是利用iframe下的表单提交完成的上传,只不过利用了php5.2的新特性而已.”
就是用表单啊,我又没说不是是用表单,上传文件ajax是不能用的。
<input onclick="startProgress(); return true;" type="submit" value="上传"/> 就是提交表单的按钮,同时调用一个javascript函数而已嘛。
“ajaxfileupload完成了模拟iframe表单提交的过程”的说法不准确,确切的说不是模拟而是就是使用表单。