Ошибка API Google Contact: истекло время ожидания запроса через скрипт. Возможные причины: неверный URL фида; канал требует аутентификации - PullRequest
4 голосов
/ 21 июня 2011

Привет! У меня ошибка в Google Contact JavaScript API. Код работал нормально с прошлого дня. Но это не работает сегодня. Не знаю, что пошло не так. (

Request via script load timed out. Possible causes: feed URL is incorrect; 
feed requires authentication.


<html>
<head>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("gdata", "1.x");</script>

<script type="text/javascript">

    google.setOnLoadCallback(initFunc);

    var contactsService;

    function setupContactsService() {
      contactsService = new google.gdata.contacts.ContactsService('GoogleInc-jsguide-1.0');
    }

    function logMeIn() {
      var scope = 'https://www.google.com/m8/feeds';
      var token = google.accounts.user.login(scope);
    }

    function initFunc() {
      //logMeOut();
      setupContactsService();
      logMeIn();
      getMyContacts();
    }

    function getMyContacts() {
          var contactsFeedUri = 'https://www.google.com/m8/feeds/contacts/default/full';

          var query = new google.gdata.contacts.ContactQuery(contactsFeedUri);

          // Set the maximum of the result set to be 5
          query.setMaxResults(10000);

          contactsService.getContactFeed(query, handleContactsFeed, handleError);
    }

    var handleContactsFeed = function(result) {
    var entries = result.feed.entry;
      for (var i = 0; i < entries.length; i++) {
        var contactEntry = entries[i];
        var emailAddresses = contactEntry.getEmailAddresses();

        for (var j = 0; j < emailAddresses.length; j++) {
          var emailAddress = emailAddresses[j].getAddress();
        }    
      }
    }

    function handleError(e) {
          alert("There was an error!" + (e.cause ? e.cause.statusText : e.message));
          //alert(e.cause ? e.cause.statusText : e.message);
    }

    function logMeOut() {
        google.accounts.user.logout();
    }

    </script>
</head>
<body>
<IMG SRC="image.jpg"/> <!-- // Image for authentication -->
</body>
</html>

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Следующий код работает для меня. Протестировано в Chrome, Safari и FireFox. Сводка изменений:

  • Проверьте, авторизован ли уже, если нет, не пытайтесь войти снова.
  • Удалено google.setOnLoadCallback(initFunc); и заменено событием нажатия кнопки. initFunc никогда не должен вызываться при загрузке страницы.
  • ВАЖНО : если на странице нет изображения, загруженного из того же домена, что и ваша страница, это не будет работать (для Google).

Вот код:

<html>
<head>
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
        google.load("gdata", "1.x");
    </script>
    <script type="text/javascript">
        var contactsService;
        var scope = 'https://www.google.com/m8/feeds';

        function setupContactsService()
        {
            contactsService = new google.gdata.contacts.ContactsService('GoogleInc-jsguide-1.0');
        }

        function logMeIn()
        {
            var token = google.accounts.user.login(scope);
        }

        function initFunc()
        {
            setupContactsService();

            if (google.accounts.user.checkLogin(scope))
            {
                getMyContacts();
            }
            else
            {
                logMeIn();
            }
        }

        function getMyContacts()
        {
            var contactsFeedUri = 'https://www.google.com/m8/feeds/contacts/default/full';
            var query = new google.gdata.contacts.ContactQuery(contactsFeedUri);

            // Set the maximum of the result set to be 5
            query.setMaxResults(1);

            contactsService.getContactFeed(query, handleContactsFeed, handleError);
        }

        var handleContactsFeed = function (result)
        {
            var entries = result.feed.entry;
            for (var i = 0; i < entries.length; i++)
            {
                var contactEntry = entries[i];
                var emailAddresses = contactEntry.getEmailAddresses();

                for (var j = 0; j < emailAddresses.length; j++)
                {
                    var emailAddress = emailAddresses[j].getAddress();
                    alert(emailAddress);
                }
            }
        }

        function handleError(e)
        {
            alert("There was an error!" + (e.cause ? e.cause.statusText : e.message));
        }

        function logMeOut()
        {
            google.accounts.user.logout();
        }

    </script>
</head>
<body>
    <input type="button" onclick="initFunc();" value="Test" />
    <img src="image.jpg" />
    <!-- // Image for authentication -->

    <script type="text/javascript">
        if (google.accounts.user.checkLogin(scope))
        {
            setupContactsService();
            getMyContacts();
        }
    </script>
</body>

EDIT

Добавлен следующий код прямо перед </body>

<script type="text/javascript">
    if (google.accounts.user.checkLogin(scope))
    {
        setupContactsService();
        getMyContacts();
    }
</script>
0 голосов
/ 07 июля 2011

@ Джеймс Хилл: Да, работает при запуске с сервера. Есть небольшая ошибка: Когда вы запускаете его в первый раз, он не возвращает контакты. Попробуйте вызвать 'logMeOut ()' непосредственно перед вызовом initFunc (). Он просто перейдет на страницу «Предоставить доступ» и вернется, но не отобразит контакты. Пожалуйста, исправьте это:)

...