AJAX проверить, если ссылка на сайте - PullRequest
0 голосов
/ 04 октября 2009

Я ищу способ проверить, существует ли ссылка на определенную страницу. Я знаю, что это возможно с помощью пинга, но я действительно не знаю, как это сделать.

У меня есть список ссылок на другие веб-страницы, они также должны иметь обратную ссылку на мою страницу. Я хочу проверить это, когда обратная ссылка есть, должен появиться текст, что-то вроде «ок», а когда результат отрицательный, что-то вроде «нет обратной ссылки»

Я знаю URL страниц, на которых должна появиться моя ссылка, если вам нужно это знать.

Любая помощь будет отличной!

Я нашел кусок кода, который, я думаю, мог бы быть использован для моих нужд. Я сам не знаю как, но было бы здорово, если бы кто-нибудь мог мне помочь с этим.

Это код:

<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 голосов
/ 04 октября 2009

ИМХО, было бы лучше выполнить эту задачу в сценарии на стороне сервера. В зависимости от вашей платформы могут быть функции для отправки HTTP-запросов и анализа HTML, что вам и нужно. Javascript имеет междоменные ограничения, которые не позволят вам отправлять запросы ajax в другие домены, чем тот, на котором размещена веб-страница.

0 голосов
/ 04 октября 2009

Вы не можете использовать 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...