#javascript #jquery #xml #xslt
#javascript #jquery #xml #xslt
Вопрос:
У меня есть HTML-файл:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>orientation test</title>
<script language="javascript" type="text/javascript" src="jquery-1.6.4.min.js"></script>
<script language="javascript" type="text/javascript" src="code.js"></script>
<script language="javascript" type="text/javascript">
alert('HI');
go();
</script>
</head>
<body>
<div id="oriented">HI</div>
</body>
</html>
Файл javascript «code.js «:
function go() {
try {
alert(1);
$(document).ready(function () {
$("#oriented").load("data.html #orient", function (response, status, xhr) {
alert(2);
if (status == "error") {
var msg = "Sorry but there was an error: ";
alert(msg);
}
else {
try {
alert($("#oriented").html());
}
catch (err) { alert(err); }
}
});
});
} catch (err) { alert('err: ' err); }
}
var a = setInterval("go();", 3000);
alert('BYE');
Файл XSL «main.xsl»:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet
version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msws="http://tempuri.org/"
>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>orientation test</title>
<script language="javascript" type="text/javascript" src="jquery-1.6.4.min.js">
<xsl:text> </xsl:text>
</script>
<script language="javascript" type="text/javascript" src="code.js">
<xsl:text> </xsl:text>
</script>
<script language="javascript" type="text/javascript">
alert('HI');
go();
</script>
</head>
<body>
<div id="oriented">HI</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XML-файл для запуска файла XSL с:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="feed.xsl"?>
<Results xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<Status>OK</Status>
<Result>
<FeedDTO>
</FeedDTO>
</Result>
</Results>
И файл для чтения в «data.html «:
<html>
<head>
<title>test</title>
</head>
<body>
<div id="orient">OFF</div>
</body>
</html>
И обязательный минимальный файл jquery версии 1.6.4 .js, который я не буду показывать здесь.
Я обнаружил, что когда «main.html » файл запускается в Firefox 7.0.1 alert(2);
, функция «go ()» никогда не срабатывает. Ранее я думал, что это происходит только тогда, когда main.xml был визуализирован, но я вижу, что сейчас это не обязательно так.
Мне нужен этот jQuery для загрузки содержимого data.html файл и поместите его в содержимое div на текущей странице, независимо от того, отображается ли текущая страница из XSL / XML или нет.
Как мне убедиться, что $.load() выполняется правильно? Ошибка try …catch не отображается.
Кроме того, мне нужно, чтобы эта работа выполнялась с локальными файлами, и в конечном итоге этот код будет выполняться как локальные файлы на iPhone.
Комментарии:
1. Разве вам не нужен
$(function(){});
или$(document).ready(function(){});
для запуска jQuery?2. Я внес соответствующие изменения, но теперь $.load() не запускается при загрузке XML-файла и преобразовании его в файл XSL. Запуск его в main.html кажется, работает нормально.
3. Вы пробовали отлаживать его с помощью Firebug (или аналогичного)
4. Да, на вкладке «Все» вообще нет сообщений.
5. Я подозревал, судя по другим имеющимся у меня тестовым файлам, что jQuery запускался со страницы, созданной файлом XSL, но, я думаю, это в значительной степени доказывает это. Я просто не знаю, почему и как это исправить / обойти.
Ответ №1:
Что ж, похоже, что это не скоро будет решено. Если есть ответ, я его не нашел.
Однако я нашел обходной путь…
Я поместил iframe (стилизованный под полностью скрытый) и создал интервал для обновления атрибута ‘src’ iframe случайным значением для единственного аргумента URL-адреса src. Что-то вроде этого:
<script type="text/javascript">
function reloadFrame()
{
var t = Math.random();
$("#loader").attr("src","updatepage.html?t=" t);
}
var a = setInterval("reloadFrame();", 1000);
</script>
<iframe id="loader" src="" style="position: absolute; visibility: none;" />
Приведенный выше код перезагружает iframe один раз в секунду. URL-адрес фактически отличается из-за случайного значения параметра ‘t’, в результате чего браузер выполняет фактический запрос к серверу / локальному файлу, а не игнорирует его на основе сопоставления URL-адреса предыдущей загрузки iframe src.