XMLHttpRequest:需要使用ajax中的成功和错误函数

时间:2016-04-30 11:45:45

标签: javascript jquery ajax node.js xmlhttprequest

当点击上传按钮,文件上传到服务器,服务器发现任何错误以及是否有错误时,我都会运行此ajax post函数,它会通过req.end();函数通知用户。问题是,从那时起,我已经转移到XMLHttpRequest()(使用它提供的onprogress函数),但我仍然需要使用ajax中的那些成功和错误函数。有没有办法以XMLHttpRequest的方式使用它们?谢谢!

这是我到目前为止的代码:

var xhrVideo = new XMLHttpRequest();
xhrVideo.open('POST', '/uploadVideo', true);
xhrVideo.upload.onprogress = function(e) {
  if (e.lengthComputable) {
    $('.videoProgress').html(((e.loaded / e.total) * 100).toFixed(0)+'%');
  }
};
var videoForm = new FormData($('.videoUploadForm')[0]);
xhrVideo.send(videoForm);

和ajax代码:

var videoData = new FormData($('.videoUploadForm')[0]);
$.ajax({
  url: '/uploadVideo',
  type: 'POST',
  data: videoData,
  cache: false,
  contentType: false,
  processData: false,
  mimeType:"multipart/form-data",
  success: function(data){
    switch(data){
      case '1':
        alert('Wrong Video File Extension');
        break;
      case '2':
        alert('Wrong Image File Type');
        break;
    }
  },
  error: function(data){
    alert('Something went wrong! Please reload this page')
  }
});

2 个答案:

答案 0 :(得分:3)

使用loaderror事件的听众。

为成功事件添加侦听器的示例。

xhrVideo.addEventListener('load', function(e) {

注意:必须在send()函数

之前添加侦听器

另外,我建议您阅读有关使用XMLHttpRequest()的整个article

答案 1 :(得分:1)

就个人而言,我喜欢使用jquery ajax而不是纯javascript ..因此你可以将xhr与ajax一起使用并捕获进度和加载事件

  

xhr (默认:可用的ActiveXObject(IE),XMLHttpRequest   否则)类型:Function()用于创建XMLHttpRequest的回调   宾语。可用时默认为ActiveXObject(IE),.   否则就是XMLHttpRequest。覆盖以提供您自己的实现   用于XMLHttpRequest或工厂的增强。

在您的代码中,您可以像这样使用它

$.ajax({
        xhr: function(){
            var xhr = new window.XMLHttpRequest();
            //Upload progress
            xhr.upload.addEventListener("progress", function(evt){
                if (evt.lengthComputable) {
                    var percentComplete = (evt.loaded / evt.total) * 100;
                      //Do something with upload progress
                        $('.videoProgress').html(Math.round(percentComplete)+"% uploaded");
                    }
                }
            }, false);
            xhr.upload.addEventListener("load", function(evt){
                evt.preventDefault();

            },false);
           return xhr;
        },
        // reset of your ajax code