从.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")