Rails 3: обновление параметров URL с помощью AJAX-запроса


У меня есть фильтр и список продуктов (id, name, creation_date).

Я могу фильтровать по id, имени или creation_date. С помощью AJAX-запроса я обновляю содержимое div... но очевидно, что URL не изменится.

Как добавить параметры в URL? Например:

localhost:3000/dashboard/catalog?name=radio&?date_creation=23-06-2013

Я знаю, что история.pushState (html5) существует... но мне нужно, чтобы мое приложение работало в браузерах html4, таких как IE9.

Я попробовал Wiselinks (https://github.com/igor-alexandrov/wiselinks ) который он использует История.js, но он не использует AJAX-запрос.

Есть идеи?

Спасибо

3 2

3 ответа:

Наконец, я следую этим учебным пособиям по железнодорожным передачам:

Http://railscasts.com/episodes/240-search-sort-paginate-with-ajax?language=es&view=asciicast

Http://railscasts.com/episodes/246-ajax-history-state?language=es&view=asciicast

Вы делаете некоторые AJAX вызов означает, что вы, должно быть, вызвали AJAX часть на переключатель изменения

Итак, я предполагаю, что вы сделали это с помощью переключателя, и имя переключателя - 'choose_product'

В представлении можно добавить скрытое поле, в котором можно хранить текущую дату.

<div id='parentDiv'>
 <%= hidden_field_tag 'current_date', Time.now.strftime('%d-%m-%Y') %>
 Your radio button code
</div>

В javascript добавьте следующий код. Это просто пример неполного решения.

$(document).ready(function(){
 var showProducts = function(){
  $("#parentDiv").on('click', "input[name='choose_product']", function(){
   var ajax_url = 'localhost:3000/dashboard/catalog';
   var url_param = '';

   switch($(this).val()){
    case 'creation_date':
     var param_date = $('#current_date').val();
     url_param = '?name=radio&date_creation=' + param_date;     
     break;
    case 'name':
     // Your code goes here
    default:
     //Your code goes here
   }

   // Here you will get the modified url dynamically
   ajax_url += url_param

   $.ajax({
    url: ajax_url,
    // your code goes here
   }); 
  });
 }

 showProducts();
});

Прошло много времени, но это может оказаться полезным. Код также обновляется, так что если у вас есть более чем одна ссылка ajax\remote, вы сможете объединить параметры нескольких URL-адресов. На основе ответа user1364684 и этого для комбинированных url.

# change ".someClassA" or "pagination" to the a link of the ajax elemen
$(document).on('click', '.someClassA a, .pagination a', function(){
    var this_params = this.href.split('?')[1], ueryParameters = {},
        queryString = location.search.substring(1), re = /([^&=]+)=([^&]*)/g, m;

    queryString = queryString + '&' + this_params;

    #Creates a map with the query string parameters
    while m = re.exec(queryString)
        queryParameters[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);

    url = window.location.href.split('?')[0] + "?" + $.param(queryParameters);

    $.getScript(url);
    history.pushState(null, "", url);

    return false;
});

# make back button work 
$(window).on("popstate", function(){
    $.getScript(location.href);
});