【问题标题】:JQuery to validate url from another domain not workingJQuery 验证来自另一个域的 url 不起作用
【发布时间】:2025-12-13 11:05:01
【问题描述】:

我对 JQuery 有点陌生。我的要求是验证来自另一个域的链接。如果成功,则重定向(在新窗口中打开页面)到该链接,否则显示警报。

我在 Jsfiddle 中尝试的内容如下:

$.ajax({ 
    url: "/user/login", 
    method: 'head', 
    error: function(){ 
        alert('Failure'); 
    }, 
    success: function(){ 
        alert("Success"); 
    } 
})

上述成功验证了 URL。但是一旦我将网址更改为http://www.google.com,它就无法正常工作。代码sn-p如下:

$.ajax({ 
    url: "http://google.com", 
    method: 'head', 
    error: function(){ 
        alert('Failure'); 
    }, 
    success: function(){ 
        alert("Success"); 
    } 
})

知道为什么这不起作用,有没有办法解决这个问题?我刚刚发现 JQuery 不支持跨域验证。是真的吗?

【问题讨论】:

  • 所以我无法使用 JQuery 验证不在同一个域中的 url?
  • 由于同源策略,您无法向外部域发出 AJAX 请求。但是,这里有一个很好的答案,显示了一些规避它的方法:*.com/questions/3076414/…
  • @SudiptaDeb 您将如何“验证”域上的链接?
  • 正是我想根据该链接是否有可用页面来验证该链接。如果是,则重定向,否则 alert('Failure')
  • @SudiptaDeb 因此,如果它只是一个检索 200 GET 标头的页面,那是否有效? (可能是重定向的 404)因为即使页面确实有内容,您如何区分合法页面和不良页面?其次,Ping 是否足以知道域上的页面是活动的?

标签: javascript jquery validation


【解决方案1】:
<script>
    var testUrl = "http://www.google1.com";
    $.ajax({ 
        url: testUrl, 
        dataType: 'jsonp',
        crossDomain: true,
        timeout: 5000,
        complete: function( e, xhr, settings ) {    
            switch( e.status ) {
               case 200:
                   window.open( testUrl );
               break;
               default:
                   alert( 'Not Valid' );
                   return false;
               break;
            }
        }   
    });
</script>

或者,我会向内部服务器端脚本发送 AJAX 请求,然后使用一些服务器端方法进行检查,例如用于 PHP 的cURL/get_file_contents()

【讨论】:

  • 首先,感谢您的快速回复。我用google.com 试过你的代码。 window.open(..) 工作正常。但是当我将网址更改为google1.com 时。我期待警报信息会出现在我们面前。但这没有发生?
  • @SudiptaDeb 稍微调整了一下,不得不设置超时,因为 google1.com 没有返回 404,因此失败。也调整为 .complete() 因为这总是被触发。
  • 现在问题出现在 IE9 上。在 IE9 中,url 无效,alert('') 不会出现。知道为什么吗?
  • async: true 添加到您的选项中(尽管它是默认值),以防万一,由于某种原因,当它为假时,即使timeout 也无法运行。
  • 不走运异步:真。 :-(
最近更新 更多