从.ajax()调用数据的jQuery .find()返回“”,而不是div

尝试使用.find().ajax()返回的数据中查找id="result" div元素。 不幸的是, 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] } }); 

要专门回答你的问题,它似乎工作正常。 你说它返回[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'); 

我花了3个小时解决了类似的问题。 这是为我工作。

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

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

尝试这个:

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

btw alert是一个粗略的方式来debugging东西,请尝试console.log

这是你的答案:

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

以下jQuery不会工作:

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

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

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

另一个相同的问题: 在$ .AJAX加载的HTML上使用Jqueryselect器?

不要忘记与parsingHTML。 喜欢:

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

必须工作:)

jQuery find()返回一个包装DOM对象的jQuery对象。 你应该能够用这个对象来做你想要的东西。

这对我有用,你只需要把.html()放在 – $(response).find(“#result”)的末尾

你可以用这种方法来find任何div,并获得它的属性或任何你想要的。

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

要么

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

问题是你的ajax 响应正在返回一个string ,所以如果直接使用$(response) ,它将返回JQUERY: Uncaught Error:语法错误,控制台中无法识别的expression式 。 为了正确使用它,你需要首先使用一个名为$ .parseHTML(response)的JQUERY内build函数。 正如函数名所暗示的那样,您需要首先将stringparsing为一个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 } }); 

#result响应HTML中是#result吗? 尝试以下。 如果没有find任何东西,jQuery仍然会返回一个空的对象。

 alert(result.length); 

您应该将dataType: "html"添加到请求中。 林相当肯定,你将无法search返回的HTML的DOM,如果它不知道它是HTML。

指定dataType: "html"

如果你不jQuery将猜测所请求的数据types(检查: http : //api.jquery.com/jQuery.ajax/ )。 我的猜测是,在你的情况下, response是一个String而不是一个DOMObject 。 很明显,DOM方法不能在String上工作。

你可以用console.log("type of response: " + typeof response) (或者alert("type of response:" + typeof response) ,以防你不运行Firebug)

如果你的ajax调用从服务器端返回一个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对象parsing成一个JS对象(variables),然后你可以使用数据的索引来检索数据! 希望这会对你们中的一些人有所帮助! 🙂

你只需使用下面的代码

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

你可能不得不做类似的事情

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

那么你应该可以使用

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