2010-01-24 2 views
4

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

Uncaught Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 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> 

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

application/xhtml+xml;charset=iso-8859-1

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

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

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

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

+0

@Urfe, в какой браузер вы получаете сообщение об ошибке? –

+0

Ошибка, которую я отправил, из Chrome. Firefox тоже не работает. Firebug дает мне очень длинную ошибку, которая начинается: «uncaught exception: [Exception ...». Компонент возвратил код ошибки: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMNSHTMLElement.innerHTML] « – AlwaysEnthusiast

+0

Хммм ... согласно некоторым страницам, которые я нашел (http://fitzsimmons.ca/jquery-xhtml-11-strict-and-ns_error_invalid_pointer/) эта ошибка связана с плохой разметкой. Это меня смущает, поскольку обе страницы проходят проверку, когда я их тестирую. :( – AlwaysEnthusiast

ответ

2

Я столкнулся с той же проблемой немного назад, я думаю, что это вызвано тем, что 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 не поддерживает, не уверен, как это можно было бы исправить разумным образом.

1

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

XHTML с применением/XHTML + XML не поддерживает сырец модификации источника с использованием любого из этих методов JQuery: добавление(), HTML(), вставить ...() и т.д.

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