Обновите две разные части страницы, используя ненавязчивый JS (в Rails w / jQuery) - PullRequest
0 голосов
/ 12 мая 2009

Когда пользователь нажимает на ссылку сортировки в моем блоге, я хочу использовать 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-запрос).

Ответы [ 3 ]

1 голос
/ 12 мая 2009
  $("#posts").html($(data).filter("#posts").html());
  $("#sorting").html($(data).filter("#sorting").html());

У меня работает. (Хотя я не уверен, что это «правильный» способ сделать это).

0 голосов
/ 30 октября 2012

Я думаю, что это может быть как-то связано с моим вопросом Rails: не угасающий, не ответы JS, а нечто среднее между , которое я только что опубликовал. Посмотрим, сможем ли мы найти правильное решение.

0 голосов
/ 12 мая 2009

Я бы сохранил данные, возвращенные в переменную (например, кэширование), используя $.load(), а затем использовал бы jQuery, чтобы выбрать div из этого кэша и добавить его в DOM, используя $.html()

...