来自.ajax()调用的数据的jQuery .find()返回“[object Object]”而不是div

时间:2010-07-21 14:29:55

标签: jquery ajax find

尝试使用divid="result"的返回数据中找到.ajax()元素.find()。很遗憾,alert(result)不会返回div#result

这是我的代码:

$.ajax({
    url: url, 
    cache: false,
    success: function(response) {
        result = $(response).find("#result");
        alert(response); // works as expected (returns all html)
        alert(result); // returns [object Object]
    }
});

18 个答案:

答案 0 :(得分:98)

要具体回答您的问题,它似乎正常工作。你说它返回[object Object],这是jQuery将使用find("#result")方法返回的内容。它返回一个与find查询匹配的jQuery元素。

尝试获取该对象的属性,例如result.attr("id") - 它应该返回result


一般来说,这个答案取决于#result是否是顶级元素。

如果#result是顶级元素,

<!-- #result as top level element -->
<div id="result">
  <span>Text</span>
</div>
<div id="other-top-level-element"></div>

find()无效。相反,请使用filter()

var $result = $(response).filter('#result');

如果#result不是顶级元素,

<!-- #result not as top level element -->
<div>
  <div id="result">
    <span>Text</span>
  </div>
</div>

find()将有效:

var $result = $(response).find('#result');

答案 1 :(得分:28)

我花了3个小时来解决类似的问题。这对我有用。

我尝试从$.get响应中检索的元素是body标记的第一个子元素。出于某种原因,当我在这个元素周围包裹一个div时,它可以通过$(response).find('#nameofelement')检索到。

不知道为什么,但是,可回收的元素不能成为身体的第一个孩子...这可能对某人有帮助:))

答案 2 :(得分:20)

试试这个:

result = $("#result", response);

btw alert是一种粗略的调试方法,请尝试console.log

答案 3 :(得分:8)

这是你的答案:

<div class="test">Hello</div>
<div class="one">World</div>    

以下jQuery不起作用:

$(data).find('div.test');    

因为div是顶级元素而数据不是元素而是字符串,为了使其工作,您需要使用.filter

$(data).filter('div.test');    

另一个相同的问题: Use Jquery Selectors on $.AJAX loaded HTML?

答案 4 :(得分:6)

不要忘记用解析html来做。像:

$.ajax({
    url: url, 
    cache: false,
    success: function(response) {
        var parsed = $.parseHTML(response);
        result = $(parsed).find("#result");
    }
});

必须工作:)

答案 5 :(得分:3)

jQuery find()返回一个包装DOM对象的jQuery对象。您应该能够使用该对象来执行div所需的操作。

答案 6 :(得分:3)

这对我有用,你只需要将.html()放在 - $(response).find(“#result”)

的末尾。

答案 7 :(得分:1)

问题是 ajax 响应 正在返回 字符串 ,因此,如果您直接使用 $(响应),它将在控制台中返回 JQUERY: 未捕获错误:语法错误,无法识别的表达式。为了正确使用它,您需要首先使用名为$.parseHTML(response)的JQUERY内置函数。正如函数名称所暗示的那样,您需要首先将字符串解析为 html对象。就像你的情况一样:

$.ajax({
    url: url, 
    cache: false,
    success: function(response) {
        var parsedResponse = $.parseHTML(response);
        var result = $(parsedResponse).find("#result");

        alert(response); // returns as string in console
        alert(parsedResponse); // returns as object HTML in console
        alert(result); // returns as object that has an id named result 
    }
});

答案 8 :(得分:1)

你可以通过这种方式找到任何div并获得它的属性或任何你想要的东西。

$(response).filter('#elementtobefindinresponse').attr("id");

$(response).filter('img#test').attr("src");

答案 9 :(得分:0)

要查看警报中的内容,请使用:

alert( $(response).find("#result").html() );

答案 10 :(得分:0)

尝试     if($(响应).filter('#result')。length)         //做某事

答案 11 :(得分:0)

$.ajax({
    url: url,
    cache: false,
    success: function(response) {
        $('.element').html(response);
    }
});

< span class = "element" >
    //response
    < div id = "result" >
        Not found 
    </div> 
</span>

var result = $("#result:contains('Not found')").text();
console.log(result); // output: Not found

答案 12 :(得分:0)

您只需使用以下代码

var response= $(result);

$(response).find("#id/.class").html(); [or] $($(result)).find("#id/.class").html();

答案 13 :(得分:0)

如果你的ajax调用返回一个JSON数组,来自服务器端的JSON字符串, 那么你应该开始做以下事情:

$("button#submit").click(function() {
    $.ajax({
        type: "POST",
         url: "ajax_create_category",
        data: $('form#create_cat_form').serialize(),
     success: function(data)
          {
          if(data)
          {
              var jsonObj = JSON.parse(data);
              if(jsonObj.status)
              {
                $("#message").html(jsonObj.msg);
              }
            }
         }
       });
    });

将您的JSON对象解析为JS对象(变量),然后您可以使用数据索引来检索数据! 希望这对你们中的一些人有所帮助! :)

答案 14 :(得分:0)

指定dataType: "html"

如果你不这样做,jQuery会猜测所请求的数据类型(检查:http://api.jquery.com/jQuery.ajax/)。我的猜测是,在您的情况下responseString而不是DOMObject。显然,DOM方法不适用于String。

您可以使用console.log("type of response: " + typeof response)(或alert("type of response:" + typeof response)进行测试,以防您未运行Firebug)

答案 15 :(得分:0)

您应该在请求中添加dataType: "html"。我很确定如果它不知道它是HTML,你将无法搜索返回的HTML的DOM。

答案 16 :(得分:0)

回复HTML中是#result吗?请尝试以下方法。如果没有找到任何内容,jQuery仍将返回一个空对象。

alert(result.length);

答案 17 :(得分:-1)

您可能需要执行类似

的操作
var content= (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d

然后你应该可以使用

result = $(content).find("#result")