Может ли Javascript получить доступ к DOM ответа Ajax text / html? - PullRequest
6 голосов
/ 13 мая 2009

Я пытаюсь использовать Ajax для извлечения HTML-страницы, а затем извлечь div по его идентификатору и вставить этот DIV в текущую страницу. Таким образом, текущая страница загружает (через Ajax) вторую страницу, извлекает div из ответа Ajax и вставляет в текущую страницу. Однако я в растерянности, поскольку, если ответ не будет text / xml, я не могу использовать какие-либо функции DOM для него ... могу я?

Ответы [ 7 ]

10 голосов
/ 13 мая 2009

Jquery (или другие библиотеки ??) в основном сделает все это за вас. Я настоятельно рекомендую разобраться в этом и не изобретать велосипед.

Для запроса, он, вероятно, хотел бы:

// Make a call to url, with data 
$.ajax(
  { url: $url,
    data: $data, 
    dataType: 'xml',
    callback: function(returnData) { 
      // Jquery find <mytag attribute="foo">...</mytag> and store it in mydata
      var mydata = $(returnData).find('mytag[attribute=foo]');
      // Insert into current page to somewhere with class="after-me"
      $('.after-me').html(mydata);
   }
});

Возможно, у меня неправильный синтаксис. Но вот документы: http://docs.jquery.com/Ajax/jQuery.ajax#options

1 голос
/ 13 мая 2009

Не беспокойтесь о валидности, так как вы делаете это динамически, используя javascript, вы можете заполнить innerHTML скрытого элемента данными ответа, а затем использовать любые функции DOM / jQuery, которые вы пожелаете

1 голос
/ 13 мая 2009

Да, вы можете. Здесь вы найдете ресурс для анализа XML-ответов.

Если вы загружаете его в дерево DOM, которое уже существует (innerHTML), вы сможете вызывать стандартные функции обхода DOM, к которым вы привыкли.

0 голосов
/ 08 ноября 2017
$.ajax({
  type: "POST",
  url : "yourURL"
  data : $("#yourFormID").serialize(),
  async: true,
  success : function(resp) {
    // resp contains data in html form you want to find data in
    // <span class="error">some Error</span>
    var errorData = $(resp).find('span.error').text();   
    // errorData would have value "some Error"             
  }
});
0 голосов
/ 20 сентября 2017

Попробуйте это. Это сработало для меня.

$.ajax({
    url: 'http://www.example.com',
    type: "GET",
    crossDomain: true,
    dataType: 'html',
    success: function (responseHTMLData) {   
        $($(responseHTMLData).find('.yourClassName')).each(function() {
            console.log($(this).attr('href'));
        });
    }
});
0 голосов
/ 03 января 2013

Чтобы использовать jQuery для извлечения только части HTML-документа, загруженного с помощью $ .load (), сделайте следующее:

$('#dynamic').load('content.html #desiredElement');

.load фактически загрузит весь документ, но селектор заставит загрузку вернуть только выбранную часть этого документа.

0 голосов
/ 13 мая 2009

теги скрипта завершатся неудачно в любом браузере любым способом ... поэтому для доступа к текущей странице примените функцию "eval" к тексту скрипта, который вы в данный момент запросили.

Я имею в виду, если у вас есть html вроде:

<div id="content">some html</div>

и вы получили текст сценария на стороне сервера, например

content.innerHTML = "foo";

использовать функцию eval для ответа ajax

function onXmlHttpAnswer()
{
   if(xmlHttp.readyState==4 && xmlHttp.status==200)eval(xmlHttp.responseText);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...