Когда пользователь нажимает на ссылку сортировки в моем блоге, я хочу использовать AJAX для извлечения новых сообщений и обновления раздела ссылок сортировки. Это было бы легко с помощью RJS, но я хочу, чтобы мой JS был незаметным и отвечал на запросы AJAX только данными (и без кода).
Вот что я сейчас делаю:
$('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;
});
и вот функция partial_html()
:
// 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));
}
Очевидно, это немного отвратительно - как правильно это сделать? (Было бы очень легко использовать два $.load()
, но для этого потребовался бы лишний HTTP-запрос).