1

我正在尝试abort()上传 AJAX 文件。我已经尝试添加事件侦听器并且我正在尝试abort()任何一个keypress,尽管我在控制台中没有看到任何东西。这必须在没有任何框架的情况下完成。

function myFunction()
{
 var xhr = new XMLHttpRequest();

 xhr.upload.addEventListener('keydown',function(e)
 {
  //if (e.keyCode==27) {}
  xhr.abort();
  console.log('escape, abort 1?');
 },false);

 xhr.addEventListener('keydown',function(e)
 {
  //if (e.keyCode==27) {}
  xhr.abort();
  console.log('escape, abort 2?');
 },false);
}
4

2 回答 2

1

尝试将事件附加到window对象:

var xhr = new XMLHttpRequest();
// ...
window.addEventListener('keydown',function(e) {
    if (e.keyCode==27) {
        xhr.abort();
    }
}, false);
于 2013-10-30T18:07:35.023 回答
0

七年后,我遇到了我的旧帖子,并决定自己尝试解决。可以嵌入window事件监听器;相关的代码行位于函数的底部,在 Waterfox 和 Chrome 中运行良好。

function ajax_promise(method,url)
{
 var xhr = new XMLHttpRequest();

 return new Promise(function (resolve, reject)
 {
  xhr.onabort = function()
  {
   alert('xhr aborted!');
  }

  xhr.onreadystatechange = function ()
  {
   if (xhr.readyState == 4)
   {
    if (xhr.status == 200) {resolve(xhr);}
    else {reject({status: xhr.status, statusText: xhr.statusText});}
   }
  };

  window.onkeydown = function(event) {if (event.key && event.key == 'Escape') {xhr.abort();}}
  xhr.open(method, url, true);
  xhr.send();
 });
}
于 2020-01-12T23:56:05.850 回答