我需要从主服务中获取数据,但有时,它不起作用,我想要一个后备。 Q& D解决方案的想法是从中下载一些数据,如果失败,请捕获错误并将URL更改为本地URL。像这样。
let found = null;
try {
$.ajax({ url: mainUrl })
.done(function (a) { found = true; });
} catch (e) {
found = false;
}
在控制台中,我可以看到浏览器抱怨无法找到源但测试变量found
仍为null
。我错过了什么?
如果有更好(但仍然相当简单)的方法来检测Web服务的存在?如果是这样,我愿意接受建议。但主要是,我很好奇上面的例子有什么问题。
答案 0 :(得分:2)
调用是异步的,浏览器不会等待你的ajax完成,然后继续执行脚本的其余部分(例如,你检查found
的值)。
此外,try / catch不会将found
设置为false,因为ajax正在触发,它只是在调用失败。尝试在.done()之后使用.fail()来捕获失败的请求。
但仍然不会将found
变量设置为false。看看这里的解释比我能提供的解决方案要好得多:https://stackoverflow.com/a/14220323/1843048