Jquery beforeSend xhr对象:未捕获类型错误:无法读取未定义的属性“addEventListener”

Jquery beforeSend xhr对象:未捕获类型错误:无法读取未定义的属性“addEventListener”,jquery,ajax,jsfiddle,xmlhttprequest,Jquery,Ajax,Jsfiddle,Xmlhttprequest,我不断地发现这个错误: 未捕获的TypeError:无法读取未定义的属性“addEventListener” 我正在尝试应用进度事件侦听器的位置 为什么我会犯这个错误 <script type="text/javascript"> $(document).ready(function(){ $("#wb_bc_file_field").change(function(){ var formdata = new FormData();

我不断地发现这个错误:

未捕获的TypeError:无法读取未定义的属性“addEventListener” 我正在尝试应用进度事件侦听器的位置

为什么我会犯这个错误

  <script type="text/javascript">
      $(document).ready(function(){
        $("#wb_bc_file_field").change(function(){
          var formdata = new FormData();
          formdata.append("video",$("#wb_bc_file_field")[0]);
          // Start Ajax Call
          $.ajax({
            url:"server.php",
            beforeSend:function(xhr){
              xhr.upload.addEventListener("progress", function(event){

              });
            },
            processData:false,
            contentType:"multipart/form-data; charset=UTF-8",

            data:formdata
          }).done(function(){
            console.log("Request is complete.");
          }).fail(function(){
            console.log("Request has failed.");
          }).always(function(){
            console.log("Request has closed.");
          }); // End .ajax
        }); // End .change
      }); // End .ready
  </script>

下面是整个脚本的一个示例。由于没有php文件,它将给出一个错误,但现在还可以。

我认为错误是由于在启动XHR请求之前调用upload事件造成的

 $.ajax({
        url:"server.php",
        beforeSend:function(xhr){
          xhr.upload.addEventListener("progress", function(event){

          });
        },
       ...
正如在代码中一样,我们在beforeSend中调用xhr.upload.addEventListenerprogress。由于我们尚未启动请求,因此我们处于beforeSend状态,因此无法拥有任何xhr.upload对象。我们可以通过将代码移动到xhr而不是beforeSend来解决这个问题

注意:您需要jQuery版本>1.5.1


这是文档:

我也想知道!
$.ajax({
  url:"server.php",    
  xhr: function()
   {
   var xhr = new window.XMLHttpRequest();
   //Upload progress
   xhr.upload.addEventListener("progress", function(evt){
    ...
   }, false);
  return xhr;
 },