JQuery AJAX анализ текста ответа - PullRequest
9 голосов
/ 26 июня 2009

Хорошо, это действительно расстраивает меня, потому что я делал это уже сто раз, и на этот раз это не работает. Я знаю, что делаю что-то не так, просто не могу понять.

Я использую подпрограмму jget .get для загрузки html из другого файла. Я не хочу использовать .load (), потому что он всегда заменяет дочерние элементы элемента, в который я загружаю контент.

Вот мой запрос .get:

$(document).ready(function() {
    $.get('info.html', {}, function(html) {
        // debug code
        console.log($(html).find('ul').html());
        // end debug code
    });
});

Файл 'info.html' - это стандартный xhtml-файл с правильным типом документа, и единственная вещь в теле - это серия ul, к которым мне нужно получить доступ. По какой-то причине функция поиска дает мне нулевое значение.

В firebug запрос GET показывает правильный текст RESPONSE, и когда я запускаю

console.log(html);

Вместо текущей строки console.log я получаю весь info.html, как я и ожидал.

Есть идеи?

Ответы [ 5 ]

10 голосов
/ 26 июня 2009

Вы не можете получить весь документ XHTML. Вы можете обрабатывать только те теги, которые существуют в <body> HTML-документе. Разочарование. Уберите из файла info.html все, что не входит в ваш тег <body>, и повторите попытку.

Существуют и другие потенциальные способы решения этой проблемы - отметьте ниже «Связанные с Stackoverflow элементы» в основе этого ответа.

Из документа: (http://docs.jquery.com/Core/jQuery#htmlownerDocument)

"Строка HTML не может содержать недопустимые элементы в элементе div, такие как элементы html, head, body или title."

Stackoverflow Связанные элементы:

8 голосов
/ 12 мая 2011

Я знаю, что это старый пост, но у меня была ТОЧНАЯ та же самая неприятная проблема в течение нескольких часов, и я нашел решение. Для меня то, что действительно работало, заключалось в том, чтобы html-содержимое было обернуто тегом form .

Таким образом, имея следующий источник HTML:

<html>
 <head>
  <body>
   <form>
    <div id="content">Some Stuff</div>
   </form>
  </body>
 </head>
</html>

С этим фрагментом jquery должно работать:

var callback = function (data) {
   alert($("#content", $(data)).html());
};
$.get(url, null, callback, null);

Надеюсь, это поможет ...

6 голосов
/ 19 июля 2011

Я нашел это довольно чистое решение:

var elementInResponse = $("<div>").html(responseText).find(selector);
3 голосов
/ 15 апреля 2011

Желая сделать то же самое и зная, что это делает нагрузка JQuery (..), я взглянул на код. Хотя вы не можете превратить полный html-ответ непосредственно в объект JQuery, вы можете добавить его к одному так:

function(data, textStatus, xhr) {
    $(target).html(jQuery("<div>").append(data).find("#snippet"));
    // Create a dummy div to hold the results,
    // inject the contents of the document into it,
    // Locate the specified elements
}

Ответ от сервера, который вводит данные, выглядит так:

<! doctype ... >
<html>
  <head>
    ...
  </head>
  <body>
    <div id="snippet">
      <p>Some content here that we are interested in</p>
    </div>
  </body>
</html>
0 голосов
/ 13 августа 2010

Попробуйте включить все тело в тег <div>, например, <body><div>content</div></body>.

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