Javascript可以访问Ajax text / html响应的DOM吗?

时间:2009-05-12 23:27:00

标签: javascript html ajax dom

我正在尝试使用Ajax获取HTML页面,然后通过它的ID拉出div,并将该DIV插入当前页面。因此,当前页面加载(通过Ajax)第二页,将div拉出Ajax响应并插入当前页面。但是我感到很茫然,除非响应是text / xml,否则我不能使用任何DOM函数......我可以吗?

7 个答案:

答案 0 :(得分:10)

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 :(得分:1)

是的,你可以。 Here您将找到有关如何解析XML响应的资源。

如果要将其加载到已存在的DOM树(innerHTML)中,您应该能够调用您习惯的标准DOM遍历函数。

答案 2 :(得分:1)

不要担心有效性,因为您使用javascript动态执行此操作,您可以使用您的响应数据填充隐藏元素的innerHTML,然后使用您希望的任何DOM / jQuery函数

答案 3 :(得分:0)

脚本标签将通过任何方法在任何浏览器上失败..所以要访问当前页面的dom,请在您当前请求的脚本文本上应用“eval”函数。

我的意思是,如果你有html:

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

你在服务器端得到了脚本文本,如

content.innerHTML = "foo";

在ajax响应中使用eval函数

function onXmlHttpAnswer()
{
   if(xmlHttp.readyState==4 && xmlHttp.status==200)eval(xmlHttp.responseText);
}

答案 4 :(得分:0)

为了使用jQuery仅提取通过$ .load()加载的HTML文档的一部分,请执行以下操作:

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

.load实际上将加载整个文档,但选择器将强制加载仅返回该文档的选定部分。

答案 5 :(得分:0)

试一试。这对我有用。

$.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'));
        });
    }
});

答案 6 :(得分:0)

$.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"             
  }
});