Javascript 尝试使用ajax检查photo link是否返回404。状态始终返回0

Javascript 尝试使用ajax检查photo link是否返回404。状态始终返回0,javascript,xmlhttprequest,Javascript,Xmlhttprequest,我正在检查照片链接是否返回404 我正在开发localhost:xxxx,所以我猜这是一个跨源问题 我最初得到的请求的资源上没有“Access Control Allow Origin”头。起源'http://localhost:xxxx因此不允许访问。我对此进行了研究并安装了这个,它禁用了跨源资源共享 但是,在安装扩展之后,我不再收到上述错误,但是检查请求的状态总是导致0 我应该如何着手解决这个问题 photo = 'http://example.com/apple.jpg'; var ph

我正在检查照片链接是否返回404

我正在开发
localhost:xxxx
,所以我猜这是一个跨源问题

我最初得到的
请求的资源上没有“Access Control Allow Origin”头。起源'http://localhost:xxxx因此不允许访问
。我对此进行了研究并安装了这个,它禁用了跨源资源共享

但是,在安装扩展之后,我不再收到上述错误,但是检查请求的
状态总是导致
0

我应该如何着手解决这个问题

photo = 'http://example.com/apple.jpg';

var photoCheck = new XMLHttpRequest();
photoCheck.open('HEAD', photo, true);
photoCheck.send();
console.log(photoCheck.status); // Always returns 0

您需要等待请求完成。请求正在进行时,状态将为0。我强烈建议使用fetch,它支持承诺并通常使请求更容易


正如在评论中提到的,我会用另一种方式来处理这个问题

如果您正在查看在线图像,只需使用
元素即可。这允许从任何域加载(除非您尝试将
http
资源引入
https
页面)

我想试试这样的

这样你就可以很容易地使用

function photoCheck(url) {
  return new Promise((resolve, reject) => {
    let img = document.createElement('img')
    img.onload = resolve
    img.onerror = reject
    img.src = url
  })
}

去掉那个扩展,它会让你的浏览器进入一个充满伤害的世界。CORS不仅保护资源不被人“窃取”,还保护您免受恶意网站的攻击。学习处理CORS问题。如果您编写了服务器,请添加cors头,如果没有,请使用您自己的服务器将您的请求“代理”到第三方服务器否,该头根本没有被禁用-请阅读扩展在响应“允许控制允许源:*”头中添加的内容
-这是启用的这是xmlhttprequest是异步的事实,您在“错误的位置”检查状态-您需要在
.onload
处理程序中进行检查-但是,如果您确实存在CORS问题,那么您也将始终获得零状态,不过,不确定是否会在该位置调用onloadcase@Valachio两者都有。除非远程资源支持CORS(或禁用浏览器的单源策略),否则您将无法从JavaScript向另一个源上的资源发出任何请求。然后,您需要等待请求完成,然后才能正确读取状态。您可以始终创建
属性,或者在回调中检查状态。我认为这不是问题所在。如果我将同步问题设置为
false
,它仍然返回0编辑-对不起,我的错误。你是对的。我查错了东西。将synchronous设置为
false
会返回正确的代码。这是一个更好的答案,适合我的特殊情况,因为我不想担心跨源问题。使用
fetch()
,我必须发送一个CORS请求,当我投入生产时,这将要求我在后端做额外的事情。只是出于好奇,如果我使用的是div
背景图像怎么办?由于没有内置的
onload
onerror
函数,此方法仅适用于
对吗?
function photoCheck(url) {
  return new Promise((resolve, reject) => {
    let img = document.createElement('img')
    img.onload = resolve
    img.onerror = reject
    img.src = url
  })
}
photoCheck('http://example.com/apple.jpg').then(() => {
  console.info('Image loads ok')
}, e => {
  console.warn('Image failed to load', e)
})