Запись в .innerHTML не работает при обслуживании с веб-сервера, но работает при просмотре в виде файла, что может быть причиной этого? - PullRequest
1 голос
/ 16 ноября 2010

Я использую Request.JSON от mootool для получения твитов из Twitter. После получения я пишу в свойство .innerHTML для моего целевого элемента div. Когда я проверяю это локально в виде файла, то есть file: // в URL, я вижу мои отформатированные твиты на веб-странице. Когда я передаю это с моего локального веб-сервера, то есть http://,, отформатированные твиты не отображаются в моем div.

Что может быть причиной этого? (Я проверял это в Safari и Chrome на OSX ... такое же поведение) Я включил код из раздела HEAD моей страницы. Кроме того, когда я отлаживаю Javascript в Safari:

"TypeError: Результат выражения 'data' [undefined] не является объектом" появляется для объявления функции обратного вызова onComplete.

<script type="text/javascript" src="js/mootools-1.3-full-compat.js"></script>
<script type="text/javascript" src="js/jquery-1.4.3.js"></script>
<script type="text/javascript" src="http://twitterjs.googlecode.com/svn/trunk/src/twitter.min.js"></script>
<script type="text/javascript">
    var jSonRequest = new Request.JSON(
    {
        url:'http://search.twitter.com/search.json?q=+nytimes+OR+TheEconomist',
        onSuccess: function(data) {
            var target = document.getElementById('twitter_content');
            target.innerHTML = ''; //clear the contents
            for(var i = 0; i < data.results.length ; i++) {
                var tweet = data.results[i];

                //process it and add html for hashtags and links
                var processed_tweet_text = tweet.text;

                //process HTTP urls first...otherwise we would get the added links for the hashtags
                var twre = /(http\:\/\/[a-zA-Z0-9.\/]+)/ig
                processed_tweet_text = processed_tweet_text.replace( twre, '<a href="$1">$1</a>' );

                //process hashtags and add link
                twre = /\@([a-zA-Z0-9_\-]+)/ig; //match twitter accounts starting with @ and includes and of these characters: a-z, A-Z, 0-9, "_" and "-" characters.
                processed_tweet_text = processed_tweet_text.replace( twre, '<a href="http://twitter.com/$1">@$1</a>' );

                target.innerHTML += '<div class="tweet"><a href="http://twitter.com/' + tweet.from_user + '">' + '<img src="' + tweet.profile_image_url + '"><div class="tweet_text"><div class="tweet_user"><a href="http://twitter.com/' + tweet.from_user + '">' + tweet.from_user + '</a></div><div class="tweet_message">' + processed_tweet_text + '</div></div></div>';
                //console.log(tweet.from_user); 
            }
        }
    }).send();
</script>

UPDATE

OK. Итак, я нашел два ответа ... один с mootools, а другой с jQuery ... спасибо всем.

Для mootools, убедитесь, что вы получили файл «more» .js с классом Request.JSONP http://mootools.net/more/ (Я вырывал свои волосы, потому что получал ошибку конструктора ... и я наконец понял, что у меня нет класса Request.JSONP !!!)

Затем просто измените код на:

var jSonRequest = new Request.JSONP(
{...

Для JQuery:

//adding callback=? forces a JSONP call...so no issues with AJAX cross-domain requests  
$.getJSON("http://search.twitter.com/search.json?q=+nytimes+OR+TheEconomist&callback=?",
  function(data) {...

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

Попробуйте использовать new Request.JSONP вместо new Request.JSON.

0 голосов
/ 16 ноября 2010

Я думаю, вам нужно декодировать данные

var object = JSON.decode(data);

Вы можете прочитать этот документ

это образец

var jsonRequest = new Request.JSON({
    url: 'http://somesite.com/tellMeAge.php',
    onSuccess: function(person){
        alert(person.age);    // alerts "25 years".
    }
})

смотреть на успех не на полный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...