Обновление javascript путем переименования атрибута src - PullRequest
1 голос
/ 05 января 2011

Я хочу обновить вывод скрипта ниже. Это Джсон? Нужно ли добавлять междоменную политику на мой сайт?

<div id="nowplaying">
   <script src="http://s4.total-streaming.com/xml.php?station=1269&get=js"></script>
</div>


Edit:
Это то, что я пытаюсь, основываясь на советах @alexn, но все равно не обновляется.

<div id="nowplaying">
    <script id="nowplaying-script" src="http://s4.total-streaming.com/xml.php?station=1269&get=js"></script>

    <script>
        setInterval(function () {
            $('#nowplaying-script').attr('src', 'http://s4.total-streaming.com/xml.php?station=1269&get=js');
        }, 1000);
    </script>
</div>

Примечание Firebug: Resource interpreted as script but transferred with MIME type text/html. xml.php:-1

Ответы [ 2 ]

2 голосов
/ 05 января 2011

Нет, это простой JavaScript.Скрипт просто выведет строку.Для этого вам не нужны междоменные политики.

Чтобы обновить содержимое, просто переназначьте атрибут src вашего тега сценария на тот же URL.Вы можете использовать setTimeout , чтобы сделать это в указанный интервал.Что-то вроде этого должно сделать это, вам нужно добавить атрибут id к вашему тегу скрипта.Следующее будет обновляться каждые 5 секунд:

setInterval(function() {
    var element = document.getElementById("nowplaying-script");
    element.setAttribute("src", "http://s4.total-streaming.com/xml.php?station=1269&get=js");
}, 5000);

(не проверено)

1 голос
/ 05 января 2011

Я бы склонялся к этой проблеме с кешем.

Как насчет того, чтобы попробовать этот плагин (или посмотреть, как он работает): http://plugins.jquery.com/project/reload

По сути, это позволит вам сделать это:

setInterval(function () {
  $('#nowplaying-script').reload();
}, 1000);

Если вы не хотите использовать плагин, все, что он делает, это добавляет текущую дату к параметрам URI.

Еще я заметил, что загружаемый скрипт содержит document.write. Даже если вам удалось перезагрузить его, он не будет делать то, что вы ожидаете.

Фактически, вызов document.write на уже загруженной HTML-странице приведет к тому, что ваша страница станет пустой и будет содержать только содержимое, переданное document.write.

Теперь я не уверен, что ваш скрипт работает на том же имени хоста, что и загружаемый скрипт, если вам не нужен JSONP API вместо скрипта, который пишет на страницу.

Если они не предлагают JSONP API, более хакерским способом решения этой проблемы будет написание серверного сценария, который действует как прокси. По сути, он будет загружать http://s4.total -streaming.com / xml.php? Station = 1269 & get = js , анализировать его на стороне сервера с помощью substr или RegEx и возвращать обратно нужный текст, в этом случае название песни, воспроизводимой в данный момент.

Другим способом решения этой проблемы было бы перезаписать метод document.write и заставить его печатать содержимое в div, а не на экране следующим образом:

document.write = function(songName) {
  $('#nowplaying').text(songName);
};

Лично я бы не использовал это решение, но оно будет работать, если другие решения слишком сложны для настройки. Помните, что все вызовы document.write на этой странице будут печатать содержимое в ваш элемент #nowplaying. Возможно, вам следует переместить свой тег SCRIPT из элемента #nowplaying, если вы используете вышеуказанное решение.

...