Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用ajax上载文件_Javascript_Ajax_Upload - Fatal编程技术网

Javascript 无法使用ajax上载文件

Javascript 无法使用ajax上载文件,javascript,ajax,upload,Javascript,Ajax,Upload,我有用于上传文件的cgi,当我使用上传文件时,它工作得很好,但是如果我使用ajax发送数据,它就不工作了 形式如下: <form id="confUpdate" enctype="multipart/form-data" method="post" action="upload.cgi"> <input id='upLoad' type='file' name="file"> <input id='btnUpload' type="submit" n

我有用于上传文件的cgi,当我使用
上传文件时,它工作得很好,但是如果我使用ajax发送数据,它就不工作了

形式如下:

<form id="confUpdate" enctype="multipart/form-data" method="post" action="upload.cgi">
    <input id='upLoad' type='file' name="file">
    <input id='btnUpload' type="submit" name="send" value="Upload">
</form>
单击按钮后,调试文本显示为“Upload:”,表示它发送文件数据,但xml(服务器端响应的内容)为空

我不确定这是我的服务器端错误还是我的javascript端错误

我想这个文件应该是name='file'

任何建议都将不胜感激

我发现了问题所在

我检查了上传的api,发现我也需要发送按钮的名称

因此,ajax现在是:

            var upfile=document.getElementById("upfile");
            var upform=document.getElementById("upform");
            var btnUpload=document.getElementById("btnUpload");
            var info=document.getElementById("InfoText");
            var xhr;

            upform.onsubmit = function(event){
                event.preventDefault();

                info.innerHTML="";

                var files=upfile.files;
                var formData=new FormData();
                if(files[0].name.split(".")[1]!="bin"){
                    info.innerHTML="The file should be .bin file.";
                }else{
                    info.innerHTML="Uploading, please wait.";
                    formData.append("file",files[0],files[0].name);
                    formData.append("send","Send");

                    if (window.XMLHttpRequest) {
                        xhr=new XMLHttpRequest();
                    }else{
                        xhr=new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    try{
                        xhr.open('POST', 'upload.cgi', true);
                        //xhr.setRequestHeader("Content-Type","multipart/form-data");
                        xhr.onreadystatechange = onReceive;
                        xhr.send(formData);
                    }catch(e){
                        xhr.abort();
                    }
                }
            }

            function onReceive(){
                var xml;
                var elem;
                if(xhr.readyState==4){
                    if(xhr.status==200){
                        xml=xhr.responseText;
                        info.innerHTML="Uploaded:"+xml;
                    }else{
                        info.innerHTML="Something is error.";
                    }
                }
            }
我真傻~谁知道我上传文件时按钮的名字很重要


谢谢大家给我的建议

服务器端代码在哪里?也,将日志记录添加到服务器端代码中,以确保一切按预期运行。将
内容类型设置为null或不设置请求头。您的浏览器是否支持ajax文件发送?您是否查看了浏览器开发人员工具中的Net标记以查看发送的数据结构?很抱歉,也回复了最近,我上周末为住院的妈妈忙着:(@Ankit,我的服务器端代码和我的本地网页(我使用bash shell编写html内容)在同一个目录中@Rahil Wazir,这是一个用于文件上传的ajax,我试图不设置请求头,但仍然不起作用:(@maxim.tkachenko,我使用crome和firefox,它可以使用ajax而不需要上传文件。@Quentin,我使用firefox进行调试,发送和我使用
提交数据一样。希望您能进一步帮助我!
            var upfile=document.getElementById("upfile");
            var upform=document.getElementById("upform");
            var btnUpload=document.getElementById("btnUpload");
            var info=document.getElementById("InfoText");
            var xhr;

            upform.onsubmit = function(event){
                event.preventDefault();

                info.innerHTML="";

                var files=upfile.files;
                var formData=new FormData();
                if(files[0].name.split(".")[1]!="bin"){
                    info.innerHTML="The file should be .bin file.";
                }else{
                    info.innerHTML="Uploading, please wait.";
                    formData.append("file",files[0],files[0].name);
                    formData.append("send","Send");

                    if (window.XMLHttpRequest) {
                        xhr=new XMLHttpRequest();
                    }else{
                        xhr=new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    try{
                        xhr.open('POST', 'upload.cgi', true);
                        //xhr.setRequestHeader("Content-Type","multipart/form-data");
                        xhr.onreadystatechange = onReceive;
                        xhr.send(formData);
                    }catch(e){
                        xhr.abort();
                    }
                }
            }

            function onReceive(){
                var xml;
                var elem;
                if(xhr.readyState==4){
                    if(xhr.status==200){
                        xml=xhr.responseText;
                        info.innerHTML="Uploaded:"+xml;
                    }else{
                        info.innerHTML="Something is error.";
                    }
                }
            }