2009-05-12 7 views
0

Wenn der Benutzer einen Sortierlink in meinem Blog klickt, möchte ich AJAX verwenden, um neue Beiträge einzuziehen und den Sortierlinkabschnitt zu aktualisieren. Dies wäre mit RJS einfach, aber ich möchte meine JS unauffällig halten und auf AJAX-Anfragen mit nur Daten (und ohne Code) reagieren.Aktualisieren Sie zwei verschiedene Teile der Seite mit unauffälligen JS (in Rails w/jQuery)

Hier ist, was ich tue jetzt:

$('a.order_by').livequery('click', function() { 
    $.get(this.href, null, function(data) { 
     // The server returns a blob of HTML with a div#posts 
     // and a div#sorting 
     $("#posts").partial_html(data, "#posts"); 
     $("#sorting").partial_html(data, "#sorting"); 
    }); 
    return false; 
    }); 

und hier ist die partial_html() Funktion:

// Stolen from the jQuery source for $.load() 
jQuery.fn.partial_html = function(data, selector) { 
    $(this).html($("<div/>").append(data.replace(/<script(.|\s)*?\/script>/g, "")).find(selector)); 
} 

Offensichtlich ist dies ein bisschen eklig ist - was ist der richtige Weg, dies zu tun? (Es wäre super einfach, zwei $.load() 's zu verwenden, aber das würde eine überflüssige HTTP-Anfrage erfordern).

Antwort

1
$("#posts").html($(data).filter("#posts").html()); 
    $("#sorting").html($(data).filter("#sorting").html()); 

Works für mich mit anhängen. (Obwohl ich nicht sicher bin, dass es der "richtige" Weg ist, es zu tun).

0

Ich würde speichern die Daten in einer Variablen zurückgegeben (man denke an das Caching) $.load() und anschließend jQuery verwenden die divs aus diesem Cache auswählen und auf das DOM $.html()