【问题标题】:Why does 500 error break ajax call?为什么 500 错误会中断 ajax 调用?
【发布时间】:2012-07-15 23:25:26
【问题描述】:

这是我的代码:

http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) http_request.overrideMimeType('text/javascript');
http_request.onreadystatechange = alertContents;
http_request.open('POST', base_url, true);
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);

正在最新的 Firefox 中运行。

此代码通常可以完美运行,但是当调用的页面产生 500 内部服务器错误时,javascript 停止在页面上运行,并且使用 setInterval/setInterval 安排的进一步事件不会被执行。为什么会这样?怎么抓?

【问题讨论】:

  • 尝试定义一个onerror 回调。捕获错误可能会阻止事件冒泡...

标签: javascript ajax http-error


【解决方案1】:

问题可能出在您的 alertContents 函数中(未在您的问题中显示)。由 .onreadystatechange 调用的函数几乎总是如下所示:

var callback = function() {
  if (http_request.readyState==4 && http_request.status==200) {
    // do stuff
  }
}

如果页面产生 500 Http 代码,则 if 语句将失败,回调中的其余代码将不会执行。要抓住它,请添加:

else if(http_request.readyState==4 && http_request.status==500) {
  console.log('The server\'s on fire!');
}

【讨论】:

  • 你需要像console.log ('The server\'s on fire!');这样转义console.log参数
  • 那么,为什么这会使使用 setInterval 安排的进一步事件不会触发?
  • 糟糕 - 应该在发布之前测试我的代码。流氓撇号现在已修复。感谢您发现它,Zeb
  • 我假设 setInterval 在回调中被调用,但现在我明白你的意思了。您是否在 web 检查器或 Firebug 中显示任何异常?
猜你喜欢
  • 1970-01-01
  • 2012-09-03
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多