Javascript изменить параметр URL, прежде чем поместить его в историю - PullRequest
0 голосов
/ 15 февраля 2012

Я использую плагин datatables JQuery. Я использую его с AJAX и нумерацией страниц (на стороне сервера). Каждая строка содержит ссылку на подробный вид этой записи. При нажатии на эту ссылку, а затем на кнопку назад, я хочу вернуться на предыдущую страницу. (Примечание: собственные данные не могут использоваться для сохранения состояния).

Этого можно достичь, если бы вы могли добавить параметр url к текущему URL до того, как он будет добавлен в историю.

Можно ли это сделать? чистый JS или JQuery на самом деле не имеет значения.

(Примечание: я новичок в этом, читал об использовании # для этого, но никогда не делал этого, поэтому, если вы рекомендуете, приведите пример, применимый к моей проблеме)

EDIT:

Очень простое руководство по плагину JQuery для барбекю. (http://benalman.com/projects/jquery-bbq-plugin/)

Предполагая, что URL имеет хэш # a = 2 & b = test, вы можете получить значения следующим образом:

//true = optional converts 2 to an integer, false to boolean,...
var a = $.bbq.getState('a',true);

Вы можете изменить / добавить значение следующим образом:

var hash = "a=3&b=hello";
$.bbq.pushState(hash);

pushState запускает событие hashchange, если оно связано. Чтобы связать событие, но следует в функции doucment.ready:

// called when # part of URL is modified
$(window).bind( 'hashchange', function( event ) {
    var hash = event.fragment; // full hash as string
    var a = event.getState('a', true ); // value for a
    // here do meaningful action like an AJAX request using the hash parameters    
});

1 Ответ

5 голосов
/ 15 февраля 2012

Да, HTML5 History API позволяет вам сделать это. Прочтите статью Управление историей браузера на MDN.

Вот пример, который добавляет параметр к текущему URL и заменяет текущую запись истории:

 var newURL = location.href + (location.search ? "&" : "?") + "myParameter=myValue";
 history.replaceState({}, '', newURL);

History API является функцией HTML5 и, к сожалению, поддерживается не во всех браузерах . Однако существует полифил с именем history.js , который заявляет о поддержке всех браузеров.

UPDATE:

Вместо того чтобы использовать собственную реализацию истории AJAX, вам, возможно, захочется взглянуть на существующие решения и плагины jQuery. Посмотрите, например, в ответах на Какой плагин jQuery для кнопки «назад» лучше всего? вопрос.

...