Подтвердить что ты не робот

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]
    }
});
4b9b3361

Ответ 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")