2011-01-15 10 views
1

Meine Frage ist, wie kann ich den HTML-Code einer Seite erhalten und in einem Objekt speichern, das ich später mit jQuery-Methoden durchsuchen kann, um Elemente nach ID, Name, Klasse usw.Wie man eine .ajax() responseText auf eine Variable setzt

Dies ist, was ich bisher:

$(document).ready(function(){ 
    $('#button').click(function() { 
     var page = $.ajax({ 
       type: 'GET', 
       url: 'Grabber.php', 
       data: {url:$('#url')}, 
       dataType: "HTML", 
       success: function(data){ 
        alert(data); //this alert displays the correct information 
       } 
        }).responseText; 
     alert(page); //this alert displays nothing 
    }); 
    }); 

Wie kann ich die „Seite“ Variable zu arbeiten? Und noch besser, wie kann ich es speichern, damit ich darauf zugreifen kann, als wäre es ein HTML-Dokument. Meine einzige Idee ist bisher ein DOM-Dokument.

Antwort

2
$(document).ready(function(){ 
var page; 
$('#button').click(function() { 
    $.ajax({ 
      type: 'GET', 
      url: 'Grabber.php', 
      data: {url:$('#url')}, 
      dataType: "HTML", 
      success: function(data){ 
       populate(data); 
      } 
    }); 
    function populate(a) { 
     page = a; 
     alert(page) 
     alert($(page).find('span').text()) 
    } 

}); 
}); 

Überprüfen Sie die documentation, $.ajax kehrt XMLHttpRequest während der Erfolg Methode data, textStatus, XMLHttpRequest zurückgibt. Was Sie hier brauchen, ist die data
Und es zugreifen, die Sie so etwas wie tun:

$(page).find('span').text() 
+0

Ich habe dies bereits versucht und die Warnung gibt eine "undefined" –

+0

Die Warnung() kann passieren, bevor der Ajax-Aufruf abgeschlossen ist, was zu einer leeren Seite Variable. Sie müssen innerhalb der Erfolgsfunktion arbeiten, um sicherzustellen, dass die Daten wirklich da sind. – Alec

+0

Setzen Sie alert() in die Erfolgsfunktion. alert() wird aufgerufen, bevor die HTTP-Anfrage zurückkommt, also ist sie nicht definiert. Entweder das, oder set 'async: false', so dass es darauf wartet, dass die HTTP-Anfrage zurückkommt. Aber ich würde empfehlen, alles in der Erfolgsfunktion zu tun, damit andere Dinge nicht aufgehalten werden. – Wiseguy

0

In Ihrem Erfolg Rückruf Sie eine Variable außerhalb der es lokalen Bereich zuweisen sollte, so dass, wenn die Funktion beendet ist, ist die Daten nicht verloren. Dann können Sie es als zweiten Parameter an die jQuery-Methode übergeben, damit Ihr jQuery-Selektor auf das von AJAX abgerufene Dokument und nicht auf das Dokument einwirkt.

var a_nasty_global_variable_you_should_put_in_a_better_place; 

// most of your code… 

    success: function(data){ 
     a_nasty_global_variable_you_should_put_in_a_better_place = data; 
    } 

// a little later… 

$('#button', a_nasty_global_variable_you_should_put_in_a_better_place).addClass('is-awesome'); 

Sie erhalten den Kern davon, nicht?

1

Die data ist nur nach einem erfolgreichen AJAX-Aufruf verfügbar. So jede Variable außerhalb dieser Erfolgsfunktion ist nicht unbedingt noch gesetzt:

$(document).ready(function(){ 
    $('#button').click(function() { 
     $.ajax({ 
      type: 'GET', 
      url: 'Grabber.php', 
      data: {url:$('#url')}, 
      dataType: "HTML", 
      success: function(data) { 
      // keep working _within_ this function 
      // and call it "page" instead of "data" if you want 
      alert(data); 

      // and to find something within this data: 
      $(data).find('.some-class')... // etc 
      } 
     }); 
    }); 
});
0

Sie entweder globalen Variable verwenden können, wenn Sie möchten, dass Variable auf derselben Seite zu sein, wo diese Ajax vorhanden ist

oder

können Sie verwenden Cookies Ihre response zu speichern, wenn eine kleine Menge an Daten zu speichern haben und verwenden responceText auf anderen Seiten für Cookies mit jquery HELP?

Verwandte Themen