JQuery.find() для данных из вызова .ajax() возвращает "[object Object]" вместо div
Попытка найти div
элемент с id="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]
}
});
Ответы
Ответ 1
Чтобы ответить на ваш вопрос конкретно, он работает правильно. Вы сказали, что он возвращает [object Object]
, что и будет возвращено jQuery с помощью метода find("#result")
. Он возвращает элемент jQuery, соответствующий запросу find
.
Попробуйте получить атрибут этого объекта, например 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');
Ответ 2
Я просто потратил 3 часа на решение подобной проблемы. Это то, что сработало для меня.
Элемент, который я пытался извлечь из моего ответа $.get
, был первым дочерним элементом тега body. По какой-то причине, когда я обернул div вокруг этого элемента, он стал доступен с помощью $(response).find('#nameofelement')
.
Не знаю, почему, но да, извлекаемый элемент не может быть первым ребенком тела... что может быть полезно кому-то:)
Ответ 3
попробуйте следующее:
result = $("#result", response);
btw alert
является грубым способом отладки вещей, попробуйте console.log
Ответ 4
это ваш ответ:
<div class="test">Hello</div>
<div class="one">World</div>
Следующий jQuery не будет работать:
$(data).find('div.test');
поскольку divs являются элементами верхнего уровня, а данные не являются элементом, а строкой, чтобы заставить его работать, вам нужно использовать .filter
$(data).filter('div.test');
Другой вопрос:
Использовать Jquery Selectors на загруженном HTML файле .AJAX?
Ответ 5
не забудьте сделать это с помощью parse html. как:
$.ajax({
url: url,
cache: false,
success: function(response) {
var parsed = $.parseHTML(response);
result = $(parsed).find("#result");
}
});
должен работать:)
Ответ 6
Функция jQuery find() возвращает объект jQuery, который обертывает объект DOM. Вы должны иметь возможность работать с этим объектом, чтобы делать то, что вы хотели бы с помощью div.
Ответ 7
Это сработало для меня, вам просто нужно положить .html() в конец - $(response).find( "# result" )
Ответ 8
Вы можете сделать это таким образом, чтобы найти любой div и получить его атрибуты или что угодно.
$(response).filter('#elementtobefindinresponse').attr("id");
или
$(response).filter('img#test').attr("src");
Ответ 9
Дело в том, что ваш ajax ответ возвращает строку , поэтому, если вы используете непосредственно $(ответ) он вернет JQUERY:. Непринятая ошибка: ошибка синтаксиса, непризнанное выражение в консоли. Чтобы правильно использовать его, вам нужно сначала использовать встроенную функцию JQUERY, называемую $. ParseHTML (response). Как следует из названия функции, вам нужно сначала проанализировать строку как объект 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
}
});
Ответ 10
Является ли #result
в ответе HTML? Попробуйте следующее. jQuery по-прежнему будет возвращать пустой объект, если он ничего не находит.
alert(result.length);
Ответ 11
Вы должны добавить dataType: "html"
к запросу. Я уверен, что вы не сможете найти DOM возвращаемого html, если он не знает, что это html.
Ответ 12
Укажите dataType: "html"
.
Если вы не jQuery угадаете запрошенный тип данных (проверьте: http://api.jquery.com/jQuery.ajax/). Я предполагаю, что в вашем случае response
был String
, а не DOMObject
. Очевидно, что методы DOM не будут работать с строкой.
Вы можете проверить это с помощью console.log("type of response: " + typeof response)
(или alert("type of response:" + typeof response)
, если вы не используете Firebug)
Ответ 13
если ваш вызов 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
вы просто используете следующий код
var response= $(result);
$(response).find("#id/.class").html(); [or] $($(result)).find("#id/.class").html();
Ответ 15
Возможно, вам придется сделать что-то вроде
var content= (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d
тогда вы сможете использовать
result = $(content).find("#result")