jQuery .load() не работает при визуализации из файла XSL

#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.