Как обновить ссылки на страницы в вызове AJAX? - PullRequest
1 голос
/ 09 апреля 2011

Итак, я реализовал нумерацию страниц AJAX. Проблема в том, что, поскольку код <%= paginate @videos %> не находится внутри части, которую я рендерил, ссылки на страницы не обновляются. Какой код jQuery мне следует использовать для обновления ссылок на страницы?

Кстати, я пытался $(".pagination").replaceWith('escape_javascript(<%= paginate @videos %>)');;

но я получаю эту ошибку: Uncaught SyntaxError: Unexpected token ILLEGAL

$(".pagination").replaceWith("escape_javascript(<%= paginate @videos %>)");; выдает эту ошибку: Uncaught SyntaxError: Unexpected identifier

Вот код JS, который видит браузер:

$(".pagination").replaceWith("  <nav class="pagination">
    <span class="prev">
  <a href="/profiles/45?_=1302313302990" class="prev" rel="prev">&laquo; Prev</a>
</span>

          <span class="page first">
  <a href="/profiles/45?_=1302313302990">1</a>
</span>

        <span class="page current">2</span>

          <span class="page last">
  <a href="/profiles/45?_=1302313302990&amp;page=3">3</a>
</span>

    <span class="next">
  <a href="/profiles/45?_=1302313302990&amp;page=3" class="next" rel="next">Next &raquo;</a>
</span>

  </nav>
");

Ответы [ 3 ]

1 голос
/ 09 апреля 2011

Проблема заключается в кавычках при использовании replaceWith. Вы должны экранировать символы этой строки, прежде чем пытаться ее использовать.

У вас есть двойные кавычки, начинающиеся и заканчивающиеся вашим строковым аргументом в функции replaceWith, но строка, которую вы передаете, также имеет двойные кавычки, которые, по-видимому, не экранированы. Каждый раз, когда встречается двойная кавычка, она завершает строку и пытается проанализировать остальное как операторы javascript, а не как строку.

1 голос
/ 09 апреля 2011

В идеале, новые ссылки на страницы должны быть включены в HTML-ответ на вызов ajax.Если это невозможно - возможно потому, что ссылки находятся в другом месте документа, тогда я бы предложил создать контекст / ссылку / URI / action / что угодно (отказ от ответственности: я не ROR), который возвращает строку JSON, структурированнуюнапример:

[{"data": "The HTML output"}, {"pageLinks": "pagination HTML"}]

и замените ваш ajax-вызов на тот, который ожидает JSON в качестве возврата dataType.Тогда это должно быть легко, например:

$.ajax({
    url: 'theURL',
    dataType: 'json',
    success: function(json) {
        $('.pagination').html(json.pageLinks);
        $('#someDiv').html(json.data);
    }
});
0 голосов
/ 27 марта 2017

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

В итоге, создайте частичное, где вы помещаете вызов помощнику will_paginate внутри div, и после вашего запроса ajax просто визуализируете этот частичный снова. Например:

_pagination.html.erb:

<div id="paginate">
  <%= will_paginate @results %>
<div>

your_template.js.erb (где должен быть доступен @results):

$('#paginate').html('j(render "pagination.html.erb")');

Этого должно быть достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...