Попытка найти 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]
}
});
Чтобы ответить конкретно на ваш вопрос, похоже, он работает правильно. Вы сказали, что он возвращает [объект Object]
, что jQuery вернет с помощью метода find ("# result")
. Он возвращает элемент jQuery, который соответствует запросу find
.
Попробуйте получить атрибут этого объекта, например result.attr ("id")
- он должен вернуть результат
.
В общем, этот ответ зависит от того, является ли #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');
Возможно, вам придется сделать что-то вроде
var content= (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d
тогда вы сможете использовать
result = $(content).find("#result")
Укажите dataType: "html"
.
Если вы этого не сделаете, jQuery будет угадывать запрошенный тип данных (проверьте: http://api.jquery.com/jQuery.ajax/ ). Я предполагаю, что в вашем случае ответ
был String
, а не DOMObject
. Очевидно, что методы DOM не будут работать со строкой.
Вы можете проверить это с помощью console.log ("тип ответа:" + тип ответа)
(или alert ("тип ответа:" + тип ответа)
в если вы не запускаете Firebug)
Необходимо добавить dataType: "html"
в запрос. Я уверен, что вы не сможете найти в DOM возвращаемый html, если он не знает, что это html.
Есть ли #result
в HTML ответа? Попробуйте сделать следующее. jQuery все равно вернет пустой объект, если ничего не найдет.
alert(result.length);
Функция jQuery find () возвращает объект jQuery, который является оболочкой для объекта DOM. Вы должны иметь возможность работать с этим объектом, чтобы делать то, что вы хотите с div.
попробуйте это:
result = $("#result", response);
btw alert
- грубый способ отладки, попробуйте console.log