it-swarm.com.de

jQuery .find () für Daten vom Aufruf von .ajax () gibt "[Objektobjekt]" statt div zurück

Der Versuch, das div-Element mit id="result" in den zurückgegebenen Daten von .ajax() zu finden, verwendet .find(). Leider gibt alert(result)div#result nicht zurück.

Hier ist mein Code:

$.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]
    }
});
42
Mensch

Um Ihre Frage konkret zu beantworten, scheint sie richtig zu funktionieren. Sie sagten, dass es [object Object] zurückgibt, was jQuery mit der find("#result")-Methode zurückgibt. Es gibt ein jQuery-Element zurück, das der find-Abfrage entspricht.

Versuchen Sie, ein Attribut dieses Objekts zu erhalten, wie result.attr("id") - es sollte result zurückgeben.


Im Allgemeinen hängt diese Antwort davon ab, ob #result das Element der obersten Ebene ist oder nicht.

Wenn #result das Element der obersten Ebene ist,

<!-- #result as top level element -->
<div id="result">
  <span>Text</span>
</div>
<div id="other-top-level-element"></div>

find() wird nicht funktionieren. Verwenden Sie stattdessen filter():

var $result = $(response).filter('#result');

Wenn #result nicht das Element der obersten Ebene ist,

<!-- #result not as top level element -->
<div>
  <div id="result">
    <span>Text</span>
  </div>
</div>

find() wird funktionieren:

var $result = $(response).find('#result');
94
Stephen Watkins

Ich habe nur 3 Stunden gebraucht, um ein ähnliches Problem zu lösen. Das hat bei mir funktioniert.

Das Element, das ich aus meiner $.get-Antwort abrufen wollte, war ein erstes untergeordnetes Element des body-Tags. Als ich dieses Element mit einem div umwickelte, wurde es aus irgendeinem Grund durch $(response).find('#nameofelement') abgerufen.

Keine Ahnung warum, aber ja, abrufbares Element kann nicht das erste Kind des Körpers sein ... das könnte für jemanden hilfreich sein :)

28
Shea Dawson

versuche dies:

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

btw alert ist eine grobe Art, Dinge zu debuggen, versuchen Sie console.log

20
antpaw

das ist deine Antwort:

<div class="test">Hello</div>
<div class="one">World</div>    

Die folgende jQuery funktioniert nicht:

$(data).find('div.test');    

da die divs Elemente der obersten Ebene sind und data kein Element, sondern eine Zeichenfolge ist, müssen Sie .filter verwenden, um zu funktionieren

$(data).filter('div.test');    

Eine andere gleiche Frage: Verwenden Sie Jquery Selectors für mit $ .AJAX geladenen HTML-Code.

8
Bảo Nam

vergessen Sie nicht, es mit parse HTML zu tun. mögen:

$.ajax({
    url: url, 
    cache: false,
    success: function(response) {
        var parsed = $.parseHTML(response);
        result = $(parsed).find("#result");
    }
});

muss arbeiten :)

6
funny

Die jQuery find () gibt ein jQuery-Objekt zurück, das das DOM-Objekt einschließt. Sie sollten in der Lage sein, mit diesem Objekt zu arbeiten, um mit dem div das zu tun, was Sie möchten.

3
Ryan

Das hat für mich funktioniert, Sie müssen nur .html () am Ende von - $ (response) .find ("# result") setzen.

3
Steve Mather

Sie können es auf diese Weise tun, um ein Div zu finden und seine Attribute oder alles, was Sie möchten, zu erhalten.

$(response).filter('#elementtobefindinresponse').attr("id");

oder 

$(response).filter('img#test').attr("src");
1
Heart

Die Sache ist, dass Ihr ajaxAntwort ein string zurückgibt, wenn Sie also direkt $ (Antwort) es würde JQUERY:Fehler abfragen: Syntaxfehler, nicht erkannter Ausdruck in der Konsole. Um es richtig verwenden zu können, müssen Sie zuerst eine integrierte JQUERY-Funktion namens $ .parseHTML (Antwort) verwenden. Der Funktionsname impliziert, dass Sie die Zeichenfolge zuerst als html-Objekt analysieren müssen. Genau so in Ihrem Fall:

$.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 
    }
});
1
sturzerblitz

versuchen if ($ (Antwort) .filter ('# result'). Länge) // etwas tun

0
Zhelyo Hristov

Ist #result im Antwort-HTML? Versuche Folgendes. jQuery gibt immer noch ein leeres Objekt zurück, wenn nichts gefunden wird.

alert(result.length);
0
Jason McCreary

Sie sollten der Anforderung dataType: "html" hinzufügen. Ich bin mir ziemlich sicher, dass Sie nicht in der Lage sein werden, das DOM des zurückgegebenen HTML-Codes zu durchsuchen, wenn es nicht weiß, dass es sich um HTML handelt.

0
Fabian

sie verwenden einfach den folgenden Code

var response= $(result);

$(response).find("#id/.class").html(); [or] $($(result)).find("#id/.class").html();
0

wenn Ihr Ajax-Aufruf ein JSON-Array, eine JSON-Zeichenfolge von der Serverseite, zurückgibt, sollten Sie Folgendes tun:

$("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);
              }
            }
         }
       });
    });

Analysieren Sie Ihr JSON-Objekt in ein JS-Objekt (Variable). Anschließend können Sie den Datenindex verwenden, um die Daten abzurufen! Ich hoffe, das wäre einigen von Ihnen hilfreich! :)

0
Randika Vishman
$.ajax({
    url: url,
    cache: false,
    success: function(response) {
        $('.element').html(response);
    }
});

< span class = "element" >
    //response
    < div id = "result" >
        Not found 
    </div> 
</span>

var result = $("#result:contains('Not found')").text();
console.log(result); // output: Not found
0
Kuldeep Gupta

Geben Sie dataType: "html" an. 

Wenn Sie dies nicht tun, wird der angeforderte Datentyp von jQuery erraten (siehe: http://api.jquery.com/jQuery.ajax/ ). Meine Vermutung ist, dass in Ihrem Fall response eine String und keine DOMObject war. Offensichtlich funktionieren DOM-Methoden nicht für einen String.

Sie können das mit console.log("type of response: " + typeof response) (oder alert("type of response:" + typeof response) testen, falls Sie Firebug nicht ausführen)

0
FK82

So zeigen Sie den Inhalt im Alert an:

alert( $(response).find("#result").html() );

0
Vikram