JQuery AJAX (Google PageRank) - PullRequest
       5

JQuery AJAX (Google PageRank)

0 голосов
/ 07 июня 2010

Мне нужна небольшая помощь ..

Я разрабатывал плагин Jqery для получения рангов страниц URL-адресов на веб-сайте с использованием XHR,

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

Вот некоторый исходный код, но я удалил несколько аспектов, которые не нужны для проверки.

pagerank.plugin.js

(
    $.fn.PageRank = function(callback)
    {
        var _library = new Object();

        //Creat the system library
        _library.parseUrl = function(a)
        {
            var b = {};
            var a = a || '';
            /*
                * parse the url to extract its parts
            */
            if (a = a.match(/((s?ftp|https?):\/\/){1}([^\/:]+)?(:([0-9]+))?([^\?#]+)?(\?([^#]+))?(#(.+))?/)) {
                b.scheme    = a[2]  ? a[2]  : "http";
                b.host      = a[3]  ? a[3]  : null;
                b.port      = a[5]  ? a[5]  : null;
                b.path      = a[6]  ? a[6]  : null;
                b.args      = a[8]  ? a[8]  : null;
                b.anchor    = a[10] ? a[10] : null
            }
            return b
        }

        _library.ValidUrl = function(url)
        {
            var b = true;
            return b = url.host === undefined ? false : url.scheme != "http" && url.scheme != "https" ? false : url.host == "localhost" ? false : true
        }

        _library.toHex = function(a){
            return (a < 16 ? "0" : "") + a.toString(16)
        }

        _library.hexEncodeU32 = function(a) {
        }

        _library.generateHash = function(a)
        {
            for (var b = 16909125, c = 0; c < a.length; c++)
            {
            }
            return _library.hexEncodeU32(b)
        }

        var CheckPageRank = function(domain,_call)
        {
            var hash = _library.generateHash(domain);
            $.ajax(
            {
                url: 'http://www.google.com/search?client=navclient-auto&ch=8'+hash+'&features=Rank&q=info:' + escape(domain),
                async: true,
                dataType: 'html',
                ifModified:true,
                contentType:'',
                type:'GET',
                beforeSend:function(xhr)
                {
                    xhr.setRequestHeader('Referer','http://google.com/'); //Set Referer
                },
                success: function(content,textS,xhr){
                    var d = xhr.responseText.substr(9, 2).replace(/\s$/, "");
                    if (d == "" || isNaN(d * 1)) d = "0";
                    _call(d);
                }
            });
        }
        //Return the callback
        $(this).each(function(){
            urlsegments = _library.parseUrl($(this).attr('href'))
            if(_library.ValidUrl(urlsegments))
            {
                CheckPageRank(urlsegments.host,function(rank){
                    alert(rank)
                    callback(rank);
                });
            }
        });
        return this; //Dont break any chain.
    }
)(jQuery);

Index.html (пример)

<html>
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
        <script type="text/javascript" src="pagerank.plugin.js"></script>
        <script type="text/javascript">
          $(document).ready(function() {
            $('a').PageRank(function(pr){
                alert(pr);
            })
        });
        </script>
    </head>
    <body>
        <a href="http://facebook.com">a</a>
<a href="http://twitter.com">a</a>
        <div></div>
    </body>
</html>

Я просто не могу понять, почему он это делает.

-

Примечания:

Использование и XHR За пределами jquery работает просто отлично!

function getPageRank(a, b) {
    a = "http://www.google.com/search?client=navclient-auto&ch=8" + awesomeHash(a) + "&features=Rank&q=info:" + a;
    var c = new XMLHttpRequest;
    c.open("GET", a, true);
    c.onreadystatechange = function () {
        if (c.readyState == 4) {
            console.log("reponse text is " + c.responseText);
            var d = c.responseText.substr(9, 2).replace(/\s$/, "");
            if (d == "" || isNaN(d * 1)) d = "0";
            b(d)
        }
    };
    c.send()
}

Ответы [ 2 ]

1 голос
/ 07 июня 2010

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

Лучшее, что вы можете сделать, это сделать AJAX-запрос к серверному сценарию, размещенному на вашем собственном сервере, и позволить этому сценарию связаться с Google.

0 голосов
/ 11 марта 2012

в целях безопасности, ни один браузер не разрешает подключать ajax к другому домену, в противном случае появится много Google, Вебер сможет разместить страницу «html» для обслуживания?

но json может это сделать, он во время выполнения вставляет скрипт на страницу, и свойство script src установлено.

google page rank api возвращает только текст наподобие «1: 1: 5», который не может быть объяснен сценарием, поэтому все пропало!

Итак, ajax не может этого сделать.

...