XMLHttpRequest总是调用"load"事件监听器,即使响应有错误状态

Ben*_*ons 24 javascript ajax error-handling xmlhttprequest

我正在使用FormData来aj文件上传.上传有效,但问题是永远不会调用"错误"回调.即使我的HTTP响应是500内部服务器错误(为了测试这个我调整服务器以500响应),调用"加载"回调.

function upload_image() {
    var form = document.getElementById('upload_image_form');
    var formData = new FormData(form);

    var xhr = new XMLHttpRequest();
    xhr.addEventListener("load", function(e) {
        alert("Success callback");
    }, false);
    xhr.addEventListener("error", function(e) {
        alert("Error callback");
    }, false);
    xhr.open("POST", "/upload_image");
    xhr.send(formData);
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我在Chrome上测试了这个.

Joe*_*Joe 24

此设置应该更好地满足您的需求:

var req = new XMLHttpRequest();
req.open('POST', '/upload_image');
req.onreadystatechange = function (aEvt) {
  if (req.readyState == 4) {
     if(req.status == 200)
      alert(req.responseText);
     else
      alert("Error loading page\n");
  }
};
req.send(formData);
Run Code Online (Sandbox Code Playgroud)

在您的代码错误中,永远不会调用回调,因为它仅由网络级错误触发,它会忽略HTTP返回码.

  • @simmbot永远不会调用错误回调,因为它仅由网络级错误触发,它忽略HTTP返回码. (9认同)

ric*_*mer 8

只要服务器响应消息,就会调用load事件.响应的语义无关紧要; 重要的是服务器响应(在这种情况下具有500状态).如果您希望对事件应用错误语义,则必须自己处理状态.