师妹请教!哪位师哥有Ajax判断文件大小的例子! 例子就没有了,思想就有。上传以后,保存上传的文件名,然后AJAX过去,用PHP函数filesize检测这个文件的大小,然后返回~至于不用new ActiveXObject问题呢,要写兼容性的代码兼容就行的了。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是我写的一个程序!帮忙给看一下!参数传不过去!upload.html<html><head><title>Ajax学习</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><script language="javascript">/*** 初始化一个xmlhttp对象*/function InitAjax(){ var ajax=false; try { ajax=new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { ajax=new ActiveXObject("Microsft.XMLHTTP"); } catch(E) { ajax=false; } } if(!ajax&& typeof XMLHttpRequest !='undefined') { ajax=new XMLHttpRequest(); } return ajax;}function validatesize(){ //获取接受返回信息层 var msg = document.getElementById("message"); //获取表单对象和用户信息值 var f = document.upload_img; var picfile = f.picfile; //接收表单的URL地址 var url="validate.php"; //实例化Ajax var ajax = InitAjax(); //通过Post方式打开连接 ajax.open("POST", url, true); //定义传输的文件HTTP头信息 ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //发送POST数据 ajax.send(picfile); //获取执行状态 ajax.onreadystatechange = function() { //如果执行状态成功,那么就把返回信息写到指定的层里 if (ajax.readyState == 4 && ajax.status == 200) { msg.innerHTML = ajax.responseText; } }}</script><body><!--上传表单,指定target属性为浮动框架iframe1--><form action="upload.php" method="post" enctype="multipart/form-data" name="upload_img" target="iframe1">选择要上传的图片:<input type="file" name="image" id="picfile" name="picfile" onchange="validatesize()"><br/><input type="submit" value="上传图片" ></form><!--显示提示信息的层--><div id="message" ></div></body></html>validate.php <?phpheader("Content-type: text/html; charset=gb2312");$picfile=$_REQUEST["picfile"];var_dump($picfile);?>根本打印不出来!为什么那! 你应该先在JS里面alert值出来,看是不是空的~ 可以用Flex吧,如果上传后再判断,那还考虑鬼的文件大小。 <input type="hidden" name="MAX_FILE_SIZE" value="30000" >MAX_FILE_SIZE 隐藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP 也会检查此项。在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。实际上,PHP 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。 ajax不能直接上传文件的.要利用iframe来操作.详细请参看 ajaxupload 我alert(picfile);打印出来是个object!但是validate.php 接收不到!在Ajax里对象应该如何传递! //获取表单对象和用户信息值 var f = document.upload_img; var picfile = f.picfile; //接收表单的URL地址 var url="validate.php?picfile="+picfile; 不行!如果这样var url="validate.php?picfile="+picfile;同样validate.php接收不到啊! 你怎么获取值?_POST['picfile']这样? 如果js不能判断文件大小,只能用ajax上传理论上,ajax是可以上传的用post方式,上传编码方式设为上传文件的 <html> <head> <title>Ajax学习 </title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <script language="javascript"> /** * 初始化一个xmlhttp对象 */ function InitAjax() { var ajax=false; try { ajax=new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { ajax=new ActiveXObject("Microsft.XMLHTTP"); } catch(E) { ajax=false; } } if(!ajax&& typeof XMLHttpRequest !='undefined') { ajax=new XMLHttpRequest(); } return ajax; } function validatesize() { //获取接受返回信息层 var msg = document.getElementById("message"); //获取表单对象和用户信息值 var f = document.forms["upload_img"]; var picfile = f.elements["picfile"].value; //接收表单的URL地址 var url="jsTest.pro.php?picfile=" + escape(picfile); //实例化Ajax var ajax = InitAjax(); //通过Post方式打开连接 ajax.open("GET", url, true); //定义传输的文件HTTP头信息 //ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //发送POST数据 ajax.send(null); //获取执行状态 ajax.onreadystatechange = function() { //如果执行状态成功,那么就把返回信息写到指定的层里 if (ajax.readyState == 4 && ajax.status == 200) { msg.innerHTML = ajax.responseText; } } } </script> <body> <!--上传表单,指定target属性为浮动框架iframe1--> <form action="upload.php" method="post" enctype="multipart/form-data" name="upload_img" target="iframe1"> 选择要上传的图片: <input type="file" name="image" id="picfile" name="picfile" onchange="validatesize()"> <br/> <input type="submit" value="上传图片" > </form> <!--显示提示信息的层--> <div id="message" > </div> </body> </html><?php header("Content-type: text/html; charset=gb2312"); $picfile=$_REQUEST["picfile"]; echo filesize($picfile)."<br>";var_dump($picfile); ?> 楼上的师哥!您写的好像能运行了!但是有个小错误!您在帮忙给看一下!Warning: filesize() [function.filesize]: stat failed for C:\Documents and Settings\kuno6\%u684C%u9762\%u4E0A%u4F20%u6D4B%u8BD5%u6587%u4EF6\Water lilies.jpg in C:\wamp\www\AjaxPHP\validate.php on line 4 我知道了!您用了一个javascript函数里escape()加密了,但是我PHP那边取还得解密!解密好像我又不会了!呵呵~~师哥在给发个函数怎么解密吧! 好像直接取值就行,不用解什么密原因可能是你所选的图片Water lilies.jpg,两个单词中间有空格,好像是filesize不能统计什么的,但这只是我的猜测,你可以在测试一下,其实这应该在判断之前就进行处理的 不行!我用了一个不带空格的图片同样出上面的问题!如果我去了escape()这个函数就能正常运行!但是我想了解一下。在PHP里如何解密那! Centos5下mcrypt的加密无法按指定模式执行 关于抓取网站数据,出现302重定向!急!急!急! 出学php,什么开发工具比较好用? 怎样让js内容的页面一下全部显示出来? 怎样把多个cookie值显示出来? 熟悉PHP和JavaScript的大哥,近来帮我看一下问题. 网页做出那种像软件界面的线条什么的是怎么弄的啊 请教!mail()问题,环境win2000+apache+php,php.ini要怎么设置才能发信? mysql语句的问题 php 对innodb 行锁不行 php中多维数组问题??? 如何快速获得积分?
upload.html
<html>
<head>
<title>Ajax学习</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<script language="javascript">
/**
* 初始化一个xmlhttp对象
*/
function InitAjax()
{
var ajax=false;
try
{
ajax=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
ajax=new ActiveXObject("Microsft.XMLHTTP");
}
catch(E)
{
ajax=false;
}
}
if(!ajax&& typeof XMLHttpRequest !='undefined')
{
ajax=new XMLHttpRequest();
}
return ajax;
}
function validatesize()
{
//获取接受返回信息层
var msg = document.getElementById("message");
//获取表单对象和用户信息值
var f = document.upload_img;
var picfile = f.picfile;
//接收表单的URL地址
var url="validate.php"; //实例化Ajax
var ajax = InitAjax();
//通过Post方式打开连接
ajax.open("POST", url, true);
//定义传输的文件HTTP头信息
ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//发送POST数据
ajax.send(picfile);
//获取执行状态
ajax.onreadystatechange = function()
{
//如果执行状态成功,那么就把返回信息写到指定的层里
if (ajax.readyState == 4 && ajax.status == 200)
{
msg.innerHTML = ajax.responseText;
}
}
}
</script>
<body>
<!--上传表单,指定target属性为浮动框架iframe1-->
<form action="upload.php" method="post" enctype="multipart/form-data" name="upload_img" target="iframe1">
选择要上传的图片:<input type="file" name="image" id="picfile" name="picfile" onchange="validatesize()"><br/>
<input type="submit" value="上传图片" >
</form>
<!--显示提示信息的层-->
<div id="message" ></div>
</body>
</html>validate.php
<?php
header("Content-type: text/html; charset=gb2312");
$picfile=$_REQUEST["picfile"];
var_dump($picfile);
?>根本打印不出来!为什么那!
MAX_FILE_SIZE 隐藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。
这是对浏览器的一个建议,PHP 也会检查此项。在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。
实际上,PHP 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
要利用iframe来操作.详细请参看 ajaxupload
var f = document.upload_img;
var picfile = f.picfile; //接收表单的URL地址
var url="validate.php?picfile="+picfile;
_POST['picfile']这样?
理论上,ajax是可以上传的
用post方式,上传编码方式设为上传文件的
<head>
<title>Ajax学习 </title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<script language="javascript">
/**
* 初始化一个xmlhttp对象
*/
function InitAjax()
{
var ajax=false;
try
{
ajax=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
ajax=new ActiveXObject("Microsft.XMLHTTP");
}
catch(E)
{
ajax=false;
}
}
if(!ajax&& typeof XMLHttpRequest !='undefined')
{
ajax=new XMLHttpRequest();
}
return ajax;
}
function validatesize()
{
//获取接受返回信息层
var msg = document.getElementById("message");
//获取表单对象和用户信息值
var f = document.forms["upload_img"];
var picfile = f.elements["picfile"].value;
//接收表单的URL地址
var url="jsTest.pro.php?picfile=" + escape(picfile);
//实例化Ajax
var ajax = InitAjax();
//通过Post方式打开连接
ajax.open("GET", url, true);
//定义传输的文件HTTP头信息
//ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//发送POST数据
ajax.send(null);
//获取执行状态
ajax.onreadystatechange = function()
{
//如果执行状态成功,那么就把返回信息写到指定的层里
if (ajax.readyState == 4 && ajax.status == 200)
{
msg.innerHTML = ajax.responseText;
}
}
}
</script>
<body>
<!--上传表单,指定target属性为浮动框架iframe1-->
<form action="upload.php" method="post" enctype="multipart/form-data" name="upload_img" target="iframe1">
选择要上传的图片: <input type="file" name="image" id="picfile" name="picfile" onchange="validatesize()"> <br/>
<input type="submit" value="上传图片" >
</form>
<!--显示提示信息的层-->
<div id="message" > </div>
</body>
</html>
<?php
header("Content-type: text/html; charset=gb2312");
$picfile=$_REQUEST["picfile"];
echo filesize($picfile)."<br>";
var_dump($picfile);
?>
原因可能是你所选的图片Water lilies.jpg,两个单词中间有空格,好像是filesize不能统计什么的,但这只是我的猜测,你可以在测试一下,其实这应该在判断之前就进行处理的