ajax使responseText成为一个对象

时间:2014-07-09 06:32:16

标签: javascript jquery ajax

我需要将ajax答案作为DOM对象。

这是我的代码:

$.ajax(URL, {
    async: false,
    complete: function(e){
        code = $(e.responseText);
        alert( code.find('body').length );
    }
});

所以我需要将响应作为一个对象,然后在其中进行选择。

但在之前的示例中,我的Firebug返回:

Object[<TextNode textContent="\n\n \n ">, title, <TextNode textContent="\n">, meta, <TextNode textContent="\n">, meta, <TextNode textContent="\n">, meta, <TextNode textContent="\n">, meta, <TextNode textContent="\n">, meta, <TextNode textContent="\n">

例如,此代码可以正常工作:

$.get(URL, function(e){
    var code = $(e);
    alert( code.find('body').length );
});

但是我需要发出异步请求,所以$ .get不是一个选项(或者我找不到解决方案)。

感谢您的建议!

2 个答案:

答案 0 :(得分:0)

您的ajax代码不正确应该是这样的,您可以在成功回调中获得响应:

$.ajax({
   url:URL,
   type : "get", 
   dataType: "html", // expected output from the requested url
   success: function(e){
      code = $(e.responseText); // or try with $(e) only
      alert( code.find('body').length );
   }, 
   error: function(err){
      alert(err.responseText);
   }
});

答案 1 :(得分:0)

我现在找到的唯一解决方案是将返回的数据作为html,然后它就可以用它进行操作。我的工作示例是:

$.ajax({
    url: URL,
    async: false,
    type : "get",
    dataType: "html",
    success: function(data){
        var response = $('<html/>').html(data);
        alert(response.find('#ELEM').length);
    }
});

所以,正如您所看到的 - 我将响应数据设为HTML,这有助于我使用.find()和其他有用的东西。

希望这个解决方案有所帮助。