【问题标题】:Check if URL is reachable from the current host检查是否可以从当前主机访问 URL
【发布时间】:2016-06-07 14:12:07
【问题描述】:

我正在尝试检查给定的 URL 是否可以从我当前的主机访问。

$(document).ready(function(){

    url1 = "https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/GuitareClassique5.png/150px-GuitareClassique5.png";
    urlYoutube = "https://www.youtube.com/embed/F2AitTPI5U0";
    url3 = "https://techslides.com/demos/sample-videos/small.mp4";
    brokenUrl = "http://www.example.com/images/1.png";  


    $.ajax({
     url: url3,
     type: "HEAD",
     fail: function () { alert("Error triggered "); },
     success: function () { alert("Success triggered"); }
    }); 


});

所以我的问题是 url1 是唯一给我正确答案的人。 urlYoutubeurl3brokenUrl 返回 CORS 错误:No 'Access-Control-Allow-Origin' header is present on the请求的资源。因此,不允许访问 Origin 'null'。

所以我在网上来回寻找解决方案,我想出的解决方案是在ajax请求参数上添加dataType: "jsonp",但不幸的是好像没用。

是否有任何其他解决方案/插件来检查是否可以从我的主机访问 URL?

【问题讨论】:

  • 如果遇到 CORS 错误,则表示无法通过 $.ajax() 使用 URL,因此表示答案是“无法访问”。
  • @Pointy “无法访问”和“由于 CORS 安全限制而无法使用”之间有很多区别
  • @Alnitak 是的,尽管对我来说,确定网络连接的想法很不稳定。这个问题当然不清楚,因为没有说明目标。
  • @Pointy 我来自网络工程背景,其中“不可访问”具有非常明确的含义;)
  • 我尊重您的专业知识,但作为一个简单的程序员,我已经学会假设网络在任何时候都可能完全消失,只有在调用“网络离线”错误处理程序时才会重新出现:)

标签: javascript jquery ajax url


【解决方案1】:

尝试使用Image 元素,设置其.src 属性,然后捕获.onerror 事件。

图像不受与 XMLHttpRequest 对象相同的 CORS 限制。

您可能需要在图片 URL 上放置一个随机后缀(例如 #<timestamp>),以确保您的应用不会被缓存所欺骗。

【讨论】:

    【解决方案2】:

    作为对 Alnitak 答案的补充,您可以在 ajax 缓存中使用

    $.ajax({ cache: false,...});
    

    这将得到与在 url 上放置随机后缀相同的结果

    【讨论】:

    • 不,在我看来,这只是一种比在 url 上添加后缀更简单的方法 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多