Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 XMLHttpRequest.send返回未定义的_Javascript - Fatal编程技术网

Javascript XMLHttpRequest.send返回未定义的

Javascript XMLHttpRequest.send返回未定义的,javascript,Javascript,大家好,我的问题是upload()每次返回undefined,但我希望返回true或false。请纠正我!教我哪里做错了。uploadToS3是我在S3上调用的另一个上传图像的函数 if(upload("fileFieldId","hiddenTextFieldId","docType","uploadId")){ alert("success"); } else{ alert("upload fail"); } function upload(fileFieldId,hidd

大家好,我的问题是
upload()
每次返回
undefined
,但我希望返回true或false。请纠正我!教我哪里做错了。uploadToS3是我在S3上调用的另一个上传图像的函数

if(upload("fileFieldId","hiddenTextFieldId","docType","uploadId")){
    alert("success");
}
else{
    alert("upload fail");
}

function upload(fileFieldId,hiddenTextFieldId,docType,uploadId){
    document.getElementById(uploadId).innerHTML = "<b>Uploading ...</b>";
    var dt= new Date();
    var file = document.getElementById(fileFieldId).files[0];
    if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari   Tue, 07 Jun 2016 14:40:00 GMT
        xmlhttp=new XMLHttpRequest();
    }
    else{// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    // alert(file.name);
    xmlhttp.open("POST", "/sellerprofile/uploadajax/");
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            var result = JSON.parse(xmlhttp.responseText);
            let headers = {
                'Accept': '*/*',
                'Content-Type': file.type, // or where ever your file object is.
                'Authorization': result.signature, // which you receive from your server
                'x-amz-acl' : 'private', // required
                'x-amz-date' : dt.toUTCString() // required
            }
            let putURL = result.url;
            let nm = result.fileName;
            // alert(result.fileName);
            let uploader = uploadToS3(putURL, headers, file)

            uploader.upload()
            .then((result) => {
                document.getElementById(hiddenTextFieldId).value = nm;
                document.getElementById(uploadId).innerHTML = "<b>File Uploaded</b>";
                document.getElementById(uploadId).style.color = "green";
                document.getElementById(fileFieldId).value = "";
                document.getElementById(fileFieldId).required = false; 
                return true;
            })
            .catch((err) => {
                document.getElementById(uploadId).innerHTML = "<b>Uploading failed....</b>";
                document.getElementById(uploadId).style.color = "red";
                return false;
            })
        }
        else{
            return false;
        }
    }
    var data =  {"type": file.type , "time": dt.toUTCString(), "extention" : (file.name).split('.').pop(),"docType": docType}
    xmlhttp.setRequestHeader("Content-Type", "application/json");
    xmlhttp.send(JSON.stringify(data));
}
if(上传(“fileFieldId”、“hiddenTextFieldId”、“docType”、“uploadId”)){
警惕(“成功”);
}
否则{
警报(“上传失败”);
}
函数上载(fileFieldId、HiddenExtFieldId、docType、uploadId){
document.getElementById(uploadId).innerHTML=“上传…”;
var dt=新日期();
var file=document.getElementById(fileFieldId).files[0];
如果(window.XMLHttpRequest){//IE7+代码,Firefox,Chrome,Opera,Safari周二,2016年6月7日14:40:00 GMT
xmlhttp=新的XMLHttpRequest();
}
else{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
//警报(文件名);
open(“POST”,“/sellerprofile/uploadajax/”;
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var result=JSON.parse(xmlhttp.responseText);
让标题={
“接受”:“*/*”,
“内容类型”:file.Type,//或文件对象所在的位置。
“授权”:result.signature,//从服务器接收
'x-amz-acl':'private',//必需
“x-amz-date”:dt.toutString()//必需
}
让putURL=result.url;
设nm=result.fileName;
//警报(result.fileName);
let uploader=uploadToS3(putURL、头、文件)
uploader.upload()
。然后((结果)=>{
document.getElementById(hiddenTextFieldId).value=nm;
document.getElementById(uploadId).innerHTML=“File upload”;
document.getElementById(uploadId).style.color=“绿色”;
document.getElementById(fileFieldId).value=“”;
document.getElementById(fileFieldId).required=false;
返回true;
})
.catch((错误)=>{
document.getElementById(uploadId).innerHTML=“上传失败…”;
document.getElementById(uploadId).style.color=“红色”;
返回false;
})
}
否则{
返回false;
}
}
var data={“type”:file.type,“time”:dt.toutString(),“extention”:(file.name).split('.').pop(),“docType”:docType}
setRequestHeader(“内容类型”、“应用程序/json”);
send(JSON.stringify(data));
}

您正在进行一个异步的AJAX请求调用,在默认流中,您的函数将不返回任何内容。每个return语句都位于onreadystatechange()方法中。因此,如果调用方法,它将发出AJAX请求并立即退出,返回“undefined”,因为这里没有return语句:

var data =  {"type": file.type , "time": dt.toUTCString(), "extention" : (file.name).split('.').pop(),"docType": docType}
xmlhttp.setRequestHeader("Content-Type", "application/json");
xmlhttp.send(JSON.stringify(data));
您可以返回类似于标志值的值,以确定调用是否已成功发送到服务器,如下所示:

return 'CALL_SENT';
并检查返回的值,如下所示:

var valReturned = upload("fileFieldId","hiddenTextFieldId","docType","uploadId");
if(valReturned === 'CALL_SENT'){
    alert("Call sent to the server");
}
else if(valReturned === true){
    alert("succcess");
}
else{
    alert("upload fail");
}

希望这有帮助。

您应该使用回调或承诺来实现这一点。我更喜欢回调解决方案

upload("fileFieldId", "hiddenTextFieldId", "docType", "uploadId", function (status) {
    if (status) {
        alert("success");
    }
    else{
        alert("upload fail");
    }
});
然后upload函数应支持最后一个参数作为回调:

function upload(fileFieldId,hiddenTextFieldId,docType,uploadId, callback) {
    ......
        uploader.upload()
        .then((result) => {
            document.getElementById(hiddenTextFieldId).value = nm;
            document.getElementById(uploadId).innerHTML = "<b>File Uploaded</b>";
            document.getElementById(uploadId).style.color = "green";
            document.getElementById(fileFieldId).value = "";
            document.getElementById(fileFieldId).required = false; 
            callback(true);
        })
        .catch((err) => {
            document.getElementById(uploadId).innerHTML = "<b>Uploading failed....</b>";
            document.getElementById(uploadId).style.color = "red";
            callback(false);
        })
    ......
}
函数上载(fileFieldId、hiddenTextFieldId、docType、uploadId、回调){
......
uploader.upload()
。然后((结果)=>{
document.getElementById(hiddenTextFieldId).value=nm;
document.getElementById(uploadId).innerHTML=“File upload”;
document.getElementById(uploadId).style.color=“绿色”;
document.getElementById(fileFieldId).value=“”;
document.getElementById(fileFieldId).required=false;
回调(true);
})
.catch((错误)=>{
document.getElementById(uploadId).innerHTML=“上传失败…”;
document.getElementById(uploadId).style.color=“红色”;
回调(假);
})
......
}