ajax检查链接是否在网站上

时间:2009-10-04 19:21:57

标签: ajax hyperlink

我正在寻找一种检查特定网页上是否存在链接的方法。我知道这可以用ping,但我真的不知道怎么做。

我所拥有的是其他网页的链接列表,他们也应该有一个反向链接到我的页面。我想检查一下,当反向链接出现时,应该出现一个文本,例如“ok”,当结果为负时,就像“没有反向链接”

我知道链接应该出现的页面的网址,以防您需要知道。

任何帮助都会很棒!

我找到了一段我认为可以用来满足我需求的代码。我自己也不知道如何,但如果有人能帮助我,那将会很棒。

这是代码:

<html>
  <head>
     <script language="javascript" type="text/javascript">
     <!--
        var ajax = new XMLHttpRequest();

        function pingSite() {
           ajax.onreadystatechange = stateChanged;
           ajax.open('GET', document.getElementById('siteToCheck').value, true);
           ajax.send(null);
        }

        function stateChanged() {
           if (ajax.readyState == 4) {
              if (ajax.status == 200) {
                 document.getElementById('statusLabel').innerHTML = "Success!";
              }
              else {
                 document.getElementById('statusLabel').innerHTML = "Failure!";
              }
           }
        }
     -->
     </script>
  </head>

  <body>
     Site To Check:<br />
     <input type="text" id="siteToCheck" /><input type="button"  onclick="javascript:pingSite()" />

     <p>
        <span id="statusLabel"></span>
     </p>
  </body>

2 个答案:

答案 0 :(得分:0)

你不能原生地使用Javascript来解析外部域,我使用了一个代理页面来嗅探内容并将其提供给ajax回调。

我的解决方案基本上抓住了要检查的网站的来源,并查看一个字符串,它可以是您的网站链接匹配。我认为这应该足够了,而不是试图解析和寻找锚点,但你可以像你想要的那样彻底(将整个事物解析为DOM元素并查找href属性值)。

如果您遇到任何问题,请告诉我。

<?php
    $query = isset($_POST['submitted']) ? true : false;
    if ( $query ) {
    $url = @file_get_contents( $_POST['site-url'] );
    if ( $url && strlen( $url ) > 0 ) {
        $checkFor = $_POST['check-for'];
        $match = preg_match( '/' . $checkFor . '/', $url );
        echo $match ? 'string (link) is found' : 'string not found';
    } else {
        echo 'could not connect to site..';
    }
    exit;
    }
?>
<form action="" id="site-checker">
    <div class="field">
    <label for="site-url">Site to check:</label>
    <input id="site-url" name="site-url" value="http://jquery.com">
    </div>
    <div class="field">
    <label for="check-for">Check for:</label>
    <input id="check-for" name="check-for" value="docs.jquery.com">
    </div>
    <input type="hidden" name="submitted" value="true">
    <input type="submit">
</form>

<div id="result"></div>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script>
    $('#site-checker').submit(function(e) {
    e.preventDefault();
    $.ajax({
        url:'check.php',
        type:'POST',
        data:$('#site-checker').serialize(),
        success:function(html) {
        $('#result').html( html );
        }
    });
    });
</script>

答案 1 :(得分:0)

恕我直言,最好在服务器端脚本中执行此任务。根据您的平台,可能存在发送HTTP请求和HTML解析的功能,这是您需要的功能。 Javascript具有跨域限制,这将阻止您将ajax请求发送到与托管网页的域不同的域。