jQuery .find () на данных из .ajax () вызов возвращает “[объектный Объект]” вместо отделения

Попытка найти 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]
    }
});
50
задан ThinkingStiff 22 December 2011 в 19:40
поделиться

7 ответов

Чтобы ответить конкретно на ваш вопрос, похоже, он работает правильно. Вы сказали, что он возвращает [объект 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');
104
ответ дан 7 November 2019 в 10:28
поделиться

Возможно, вам придется сделать что-то вроде

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

тогда вы сможете использовать

result = $(content).find("#result")
-1
ответ дан 7 November 2019 в 10:28
поделиться

Укажите dataType: "html" .

Если вы этого не сделаете, jQuery будет угадывать запрошенный тип данных (проверьте: http://api.jquery.com/jQuery.ajax/ ). Я предполагаю, что в вашем случае ответ был String , а не DOMObject . Очевидно, что методы DOM не будут работать со строкой.

Вы можете проверить это с помощью console.log ("тип ответа:" + тип ответа) (или alert ("тип ответа:" + тип ответа) в если вы не запускаете Firebug)

0
ответ дан 7 November 2019 в 10:28
поделиться

Необходимо добавить dataType: "html" в запрос. Я уверен, что вы не сможете найти в DOM возвращаемый html, если он не знает, что это html.

0
ответ дан 7 November 2019 в 10:28
поделиться

Есть ли #result в HTML ответа? Попробуйте сделать следующее. jQuery все равно вернет пустой объект, если ничего не найдет.

alert(result.length);
0
ответ дан 7 November 2019 в 10:28
поделиться

Функция jQuery find () возвращает объект jQuery, который является оболочкой для объекта DOM. Вы должны иметь возможность работать с этим объектом, чтобы делать то, что вы хотите с div.

3
ответ дан 7 November 2019 в 10:28
поделиться

попробуйте это:

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

btw alert - грубый способ отладки, попробуйте console.log

20
ответ дан 7 November 2019 в 10:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: