首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

利用ajax文件上传不成功解决思路

2012-03-19 
利用ajax文件上传不成功做之前不用异步直接测试HTML和PHP都是没问题的(说明下,我的后台用的PHP),但是当我

利用ajax文件上传不成功
做之前不用异步直接测试HTML和PHP都是没问题的(说明下,我的后台用的PHP),但是当我采用AJAX异步上传的时候就出现问题了,本人新手,出于初级学习阶段,希望大家帮我指出下问题。
另外我想向WEB开发方向学习,目前只是熟悉了HTML,css,php(不过库函数没记到几个,基本都是w3c开着写代码),JS刚刚接触,学了一段时间后,我发现自己最基本HTTP协议都没有去看过,请问这样是不是有点本末倒置呢?希望有人能给指出个学习的顺序和重点,感激不尽。
下面上代码
html表单部分(表单具体内容太多,无关紧要,只贴了3个重要部分)

HTML code
<html><head><title>上传页面</title><script type="text/javascript" src="js/upload.js"></script></head><body><form id="uploadform" method="post" ENCTYPE="multipart/form-data"><input  onclick="show()" type="submit" value="上传" /></form><div style="width:200px;height:80px;background:yellow; float:left" id="uploadshow"></div></body>


upload.js(大致就是先请求一张拥有处理表单数据和上传文件的页面,获取处理后的值再请求一张数据库存信息的php页面,那张页面先检测文件是否上传成功,成功就讲数据存入数据库)
JScript code
    function createAjax(){        var request=false;                //window对象中有XMLHttpRequest存在就是非IE,包括(IE7,IE8)        if(window.XMLHttpRequest){            request=new XMLHttpRequest();            if(request.overrideMimeType){                request.overrideMimeType("text/xml");            }                //window对象中有ActiveXObject属性存在就是IE        }else if(window.ActiveXObject){                        var versions=['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];            for(var i=0; i<versions.length; i++){                    try{                        request=new ActiveXObject(versions[i]);                        if(request){                            return request;                        }                    }catch(e){                        request=false;                    }            }        }        return request;    }var ajax=null;function show(){    ajax=createAjax();    ajax.open("post", "program_upload.php",true);    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    ajax.send(document.getElementById("uploadform").submit());        //指定异步处理显示对象    var obj_uploadshow=document.getElementById("uploadshow");        //回调函数    ajax.onreadystatechange=function(){        obj_uploadshow.innerHTML='uploading..';        if(ajax.readyState==4 && ajax.status==200){                var file=ajax.responseText;                eval("var obj="+file);                var id = obj.id;                var program_contentadd = obj.program_contentadd;                var program_date = obj.program_date;                var program_team = obj.program_team;                var program_title = obj.program_title;                var program_author = obj.program_author;                var program_add = obj.program_add;                var program_type = obj.program_type;                                function upload_sql(){                    ajax=createAjax();                    ajax.open("POST", "program_upload_sql.php",true);                    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");                    ajax.send('id='+id+'&program_contentadd='+program_contentadd+'&program_date='+program_date+'&program_team='+program_team+'&program_title='+program_title+'&program_author='+program_author+'&program_add='+program_add+'&program_type='+program_type);                    if(ajax.responseText==null){                        var continue_send;                        continue_send=setTimeout("upload_sql()",1000);//每1秒检测一次文件是否上传成功                    }                    var obj_uploadshow=document.getElementById("uploadshow");                    ajax.onreadystatechange= function(){                        if(ajax.readyState==4 && ajax.status==200 && ajax.responseText!=null){                        var result=ajax.responseText;                        obj_uploadshow.innerHTML = "chenggong";//result;                        }                    }                }        }        else{            alert("shibai");        }    }} 



program_upload_sql.php
PHP code
<?phpinclude_once ("inc_connet_sql.php");$id=$_POST[id];$program_contentadd=$_POST[program_contentadd];$program_date=$_POST[program_date];$program_team=$_POST[program_team];$program_title=$_POST[program_title];$program_author=$_POST[program_author];$program_add=$_POST[program_add];$program_type=$_POST[program_type];if($_FILE[$program_contentadd]['error']=0){      if($_FILE[$program_add]['error']=0){        $sql="insert into program (program_main,program_id,program_contentadd,program_date,program_team,program_title,program_author,program_add,program_type)VALUES(' ','$id','$program_contentadd','$program_date','$program_team','$program_title','$program_author','$program_add','$program_type')";        if (mysql_query($sql,$link)){            echo "文件上传成功";        }        else {            die( 'Error:' . mysql_error() );        }        mysql_close($link);    }}?>



[解决办法]
prompt aborted by user 这是用户取消的意思

你可以跟踪一下你的php页面的执行情况
[解决办法]
断点调试。。。
[解决办法]
ajax无法上传文件。

只能用隐藏的iframe来实现,即将表单提交到隐藏的iframe里面,处理程序和普通的html提交一样。或者改用其他技术,如flash

参考
ajax无刷新上传文件,使用iframe模仿
[解决办法]
你可以使用qq.FileUploader plugin , 好象比你上面的用法簡單些.
http://valums.com/ajax-upload/
另外有 AJAX Upload 的demo
http://valums.com/files/2009/ajax-upload/demo-jquery.htm
供你參考
[解决办法]
+1我也是这样用的
探讨
ajax无法上传文件。

只能用隐藏的iframe来实现,即将表单提交到隐藏的iframe里面,处理程序和普通的html提交一样。或者改用其他技术,如flash

参考
ajax无刷新上传文件,使用iframe模仿

热点排行