日期:2014-05-17  浏览次数:20425 次

小妹请教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 code

<?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 code

<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 code

<?php
//返回文件大小,返回错误为空,让前台显示文件大小
$fileElementName = 'image'; 
$size = $_FILES[$fileElementName]['size'];
echo "{msg: '