关于javascript:为什么我的捕获块没有捕获“只有协议方案支持交叉源请求:http …”

Why Is My catch Block Not Catching “Cross origin requests are only supported for protocol schemes: http…”

我有一个javascript脚本,它使用jquery post命令登录到服务器并获取令牌。我将代码包装在一个try块和一个catch块中,该块看起来如下:

1
2
3
4
catch (error)
{
  alert(error.message);
}

我的代码运行良好,但为了彻底测试它,我故意更改了协议,使URL看起来像这样:

1
"htt://some.domain:8080/jsonrpc"

我的代码不捕获错误并显示警报。相反,chrome控制台显示以下错误:

XMLHttpRequest cannot load htt://some.domain:8080/jsonrpc. Cross origin requests are only supported for protocol schemes: http, data,
chrome, chrome-extension, https, chrome-extension-resource.

我希望在控制台中出现某种格式错误的URL异常,而不是错误。

其他故意错误(如密码错误)的结果会导致捕获异常。

谢谢


因为Ajax是异步的。错误发生在try/catch块之外。

当状态更改为0时,可以在xmlhttpRequest中检测到此类错误。(不过,此状态代码还包括一些其他错误状态,因此您不可能精确)。

当状态为0时,可以传递给jquery ajax的error处理程序将触发。