Выполнение вызова AJAX в другом вызове AJAX (без jQuery)

#javascript #ajax

#javascript #ajax

Вопрос:

Я использую сторонний API для загрузки видео на этот сервер. После того, как я загрузил видео, я делаю проверочный вызов, чтобы проверить, был ли загружен весь файл (‘verifyUpload()’). Если весь файл был загружен, тогда отлично, в противном случае я возобновляю загрузку (‘resumeUpload ()’) с последнего загруженного байта. Проблема, с которой я сталкиваюсь, и я не понимаю почему, заключается в том, что мой ‘resumeUpload ()’, похоже, не выполняется — я неправильно закодировал это?

В консоли я вижу следующие строки, выполняемые из resumeUpload():

console.log(‘vim.resumeUpload() …’);

console.log(‘stringArgument: ‘ stringArgument);

Но вместо строки: xmh.setRequestHeader(‘Content-Range’, stringArgument);

выполняется, я вижу: xmh.setRequestHeader(‘Content-Range’, ‘bytes /‘);

выполняется из verifyUpload() .

verifyUpload()

  // VERIFY UPLOAD (SO FAR)
var verifyUpload = function(){
console.log('verifying upload() ...');

var xmh = new XMLHttpRequest;

xmh.onreadystatechange = function(){
    
    console.log('xmh.readyState111: '   xmh.readyState);
    console.log('xmh.status111: '   xmh.status);
    
    if(xmh.readyState == xmh.HEADERS_RECEIVED){
        console.log('VERIFY RESPONSE HEADERS: '   xmh.getAllResponseHeaders());
        console.log('getResponseHeader('Content-Range')'   xmh.getResponseHeader("Range"));
        
        var range = xmh.getResponseHeader("Range");
        var rangeArray = range.split('-');
        var bytesUploaded = rangeArray[1];
        bytesUploaded = Number(bytesUploaded);
        
        var leftToUpload = vim.vidFileSize-bytesUploaded;
        console.log('bytesUploaded: ' bytesUploaded);
        console.log('byteLeftToUpload: '  leftToUpload);
        
        // IF ALL THE FILE HAS BEEN UPLOADED TO THE SERVER
        // COMPLETE UPLOAD
        if(leftToUpload == 0){
            completeVidUpload();
        }else{
            // NEED TO RESUME UPLOAD FROM WHERE WE LAST LEFT OFF
            vim.bytesToUploadFrom = bytesUploaded   1;  
            var stringValue = 'bytes ' vim.bytesToUploadFrom '-' vim.vidFileSize '/' vim.vidFileSize '';
            console.log('stringValue: '  stringValue);
            resumeUpload(stringValue);
        }  
    } 
}
xmh.open('PUT', vim.upload_link_secure);
xmh.setRequestHeader('Content-Range', 'bytes */*');
xmh.send();
}
 

resumeUpload():

  // RESUME UPLOAD WHERE LEFT OFF
var resumeUpload = function(stringArgument){
console.log('vim.resumeUpload() ...');
console.log('stringArgument: '   stringArgument);

var xmh = XMLHttpRequest;

// SET EVENT LISTENERS
// SET EVENT LISTENERS
xmh.upload.addEventListener('progress', uploadProgres, false);
xmh.addEventListener('load', uploadComplete, false);
xmh.addEventListener('error',uploadError, false);

xmh.onreadystatechange = function(){
    if(xmh.readyState == xmh.HEADERS_RECEIVED){
        console.log('VERIFY RESPONSE HEADERS222: '   xmh.getAllResponseHeaders());
        console.log('getResponseHeader('Content-Range')222'   xmh.getResponseHeader("Range"));
    }
}
xmh.open('PUT', vim.upload_link_secure);
xmh.setRequestHeader('Content-Range', stringArgument);
xmh.send();
 

}

Комментарии:

1. Но вместо строки: xmh.setRequestHeader(‘Content-Range’, stringArgument); — Я нигде не вижу, что вы регистрируете xmh.setRequestHeader('Content-Range', stringArgument);

2. Я вижу из среды разработки браузера в разделе «заголовок запроса», что я отправил

3. вы добавили new , как я упоминал в моем ответе?

Ответ №1:

Я думаю, вы пропустили new resumeUpload здесь:

 var xmh = XMLHttpRequest;