【问题标题】:How to know if url is available?如何知道 url 是否可用?
【发布时间】:2011-12-02 15:57:19
【问题描述】:

我有一个指向 Intranet 方向的链接:

<a href="http://10.2.68/name/">Go</a>

只有内网用户可以访问,否则会报404错误。我想在重定向之前知道该 url 是否有效,这样离开 Intranet 的用户不会收到 404 错误,而是一条消息说“您无权访问”。如何使用 jquery 或 javascript 做到这一点?。

编辑: 好吧,非常感谢你,但不幸的是,任何方法都不适合我。抱歉,我没有提到网站和 Intranet url 在不同的域中。 最后我必须在代码隐藏中验证用户 IP 并写入或不写入 Intranet url。

【问题讨论】:

    标签: javascript jquery url validation


    【解决方案1】:

    您可以先发出 ajax 请求,例如:

    $.ajax({
      url: "http://10.2.68/name/",
      context: document.body,
      success: function(){
           window.location = "http://10.2.68/name/";
      }
    });
    

    这可以通过绑定到链接上的点击事件来运行。

    由于跨源问题不确定它是否会起作用,但可能是一个不错的起点。

    【讨论】:

    • 这行得通吗?我猜,ajax 同步调用时,点击会重定向链接
    【解决方案2】:

    您可以使用此 jQuery 插件向远程文件发出 head 请求,如果返回的内容很好(例如,您可以显示它),否则不要显示它

    插件: http://binarykitten.me.uk/dev/jq-plugins/88-jquery-plugin-ajax-head-request.html

    【讨论】:

      【解决方案3】:

      也许改用 htaccess 文件来检测内部网络?

      【讨论】:

        【解决方案4】:

        如果链接处于非活动状态,最好的答案是在用户尝试点击之前禁用链接(为什么要让他们尝试?)。

        jQuery(function($) { // make sure dom is ready
        
            $.ajax( {
                url: url,
                //dataType: 'JSONP', //might need this?
                complete: function(xhr) { // use complete so it fires on error OR success
                   if( xhr.status == 200 || xhr.status == 304 ) {
                       $('#link').addClass('valid');
                   }
                   else {
                       $('#link').addClass('invalid').click(function() { return false; });
                   }
                }
            });
        
        });
        

        但是,如果您不想接听电话,因为每分钟都会有成千上万的用户查看该页面...

        jQuery(function($) { // make sure dom is ready
        
            $('#link').click(function() {
                $.ajax( {
                   url: url,
                   //dataType: 'JSONP', //might need this?
                   success: function() {
                      window.location = url;
                   },
                   error: function() {
                      // does this work with JSONP? be sure to check!
                      window.alert('could not connect');
                   }
                }
            });
        
        });
        

        【讨论】:

          【解决方案5】:

          假设你的锚有一个 ID:

          <a id="lnkGo" href="http://10.2.68/name/">Go</a>
          

          您的 jQuery 代码可能如下所示:

          $("#lnkGo").bind("click", function() {
              var $that = $(this);
              $.ajax({
                url: $that.attr("href"),
                statusCode: {
                  200: function() {
                    window.location = $that.attr("href")
                  },
                  404: function () {
                    alert("Sorry, page is unavailable...");
                  }
                }
              });
              return false;
          });
          

          另外,请记住,这不适用于跨域问题。 url 必须与当前域相同

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-08
            • 2010-10-10
            • 1970-01-01
            • 2016-02-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多