jQuery .load () XHTML проблема - PullRequest
4 голосов
/ 24 января 2010

У меня странные проблемы с загрузкой контента с другой страницы XHTML через jQuery. Когда вторая страница, с которой я пытаюсь загрузить страницу, используется как XHTML, я получаю сообщение об ошибке ниже. Я не знаю, помогает ли это, но оба документа подтверждают, когда я получаю ошибку.

Uncaught Error: NO_MODIFICATION_ALLOWED_ERR: DOM Исключение 7

В настоящее время заголовок на второй странице, с которого я загружаю:

<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 <meta name="language" content="en" />  
 <title>some title</title>
 <!-- CSS & Javascript included here -->
</head>

Тип содержимого установлен как:

приложение / XHTML + XML; кодировка = изо-8859-1

Интересно, что когда я удаляю все содержимое XHTML из заголовка и прекращаю задавать тип содержимого, ошибка не возникает, и все прекрасно работает .

Процесс загрузки в данный момент выглядит следующим образом. Работает нормально, когда все в простом HTML.

$('#overpage').find(".wrap").load(this.getTrigger().attr("href")+" #op").show();

Мне любопытно, почему процесс не работает, только когда вторая страница, с которой я загружаю, - это XHTML. Я не хочу показывать страницу как обычный HTML-код и ищу совета о том, что я делаю неправильно. Обе страницы подтверждают, и я действительно чешу голову здесь. Большое спасибо!

Ответы [ 3 ]

3 голосов
/ 28 апреля 2010

Я думаю, это связано с тем, что document.write не работает со строгим XHTML:

http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite

2 голосов
/ 05 мая 2011

Я столкнулся с той же проблемой немного назад, я думаю, что это вызвано тем, что jquery берет (X) HTML, который он получает, вставляет его в фиктивный div и только затем запускает селектор (#op в вашем случае) для извлечения правильная часть и вставьте это в последнее место. Вот соответствующий код jquery (взят из 1.5.1, но 1.6 выглядит идентично):

jQuery("<div>")
    // inject the contents of the document in, removing the scripts
    // to avoid any 'Permission Denied' errors in IE
    .append(responseText.replace(rscript, ""))

    // Locate the specified elements
    .find(selector)

В Firebug я вижу, что он выдает ошибку в строке .append, потому что он не получает заголовок <?xml или <DOCTYPE внутри div ... Так что я думаю, это просто что-то, чего не делает jquery t, не уверен, как это можно исправить нормальным способом.

1 голос
/ 17 июня 2011

XHTML не поддерживает document.write или innerHTML. В связи с тем, что jQuery вставляет новый код с помощью одного из этих методов, все XHTML-совместимые браузеры будут выдавать ошибку.

XHTML с application / xhtml + xml не поддерживает необработанную модификацию источника с использованием любого из следующих методов jQuery: append (), html (), insert ... () и т. Д.

Вместо этого запросите некоторые данные JSON и вставьте полученные AJAX-значения в предварительно определенные теги с помощью .text () / .val () или динамически создайте эти узлы с помощью document.createElement ('someTag').

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