У меня есть раскрывающееся меню в моей форме, которое, когда что-то выбрано, мне нужно перезагрузить текущую страницу, но с добавленным запросом.
Как мне это сделать?
У меня есть раскрывающееся меню в моей форме, которое, когда что-то выбрано, мне нужно перезагрузить текущую страницу, но с добавленным запросом.
Как мне это сделать?
Это старый вопрос, но он появился первым в результатах поиска Google.
Решение, с которым я работал, похоже на jAndy's.
window.location.pathname
дает мне url страницы без строки запроса.
Затем я могу построить строку запроса с помощью "?"+$.param({'foo':'bar','base':'ball'})
, которую я затем добавляю к имени пути и устанавливаю в window.location.href
.
window.location.href = window.location.pathname+"?"+$.param({'foo':'bar','base':'ball'})
var params = [
"foo=bar",
"base=ball"
];
window.location.href =
"http://" +
window.location.host +
window.location.pathname +
'?' + params.join('&');
Этот код в вашем обработчике событий change
выполнит трюк.
Например:
$('#my_dropdown_id').bind('change', function(){
var params = [
"foo=bar",
"base=" + $(this).val()
];
window.location.href = "http://" + window.location.host + window.location.pathname + '?' + params.join('&');
});
Если вы перейдете с самым высоким ответом, вы можете захотеть заменить
http://
в коде с
window.location.protocol
чтобы он работал для других протоколов, таких как https или file. Так
window.location.href = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + params.join('&');
Если вам нужен действительно простой способ сохранить строку запроса и, возможно, добавить к ней, используйте window.location.search
; здесь фрагмент:
var search = window.location.search + (window.location.search ? "&" : "?");
search += "param1=foo¶m2=bar";
window.location.href = window.location.protocol + "//" + window.location.host + window.location.pathname + search;
Вы можете, конечно, использовать более сложный способ построения остальной строки запроса, как показано в других примерах, но ключ заключается в использовании Location.search
.
Если у вас есть существующая цепочка, которую вы хотите сохранить, то эта версия делает это и добавляет ваши новые параметры к любым существующим. Клавиши преобразуются в строчные буквы, так что дубликаты не добавляются. Поддержание quersytring делает решение более сложным, поэтому я бы сделал это только в случае необходимости.
$("#sortby").change(function () {
var queryString = getQueryStrings();
// Add new params to the querystring dictionary
queryString["sortby"] = $("#sortby").val();
window.location.href =
window.location.protocol + "//" +
window.location.host +
window.location.pathname +
createQueryString(queryString);
});
// http://stackoverflow.com/info/2907482
// Gets Querystring from window.location and converts all keys to lowercase
function getQueryStrings() {
var assoc = {};
var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); };
var queryString = location.search.substring(1);
var keyValues = queryString.split('&');
for (var i in keyValues) {
var key = keyValues[i].split('=');
if (key.length > 1) {
assoc[decode(key[0]).toLowerCase()] = decode(key[1]);
}
}
return assoc;
}
function createQueryString(queryDict) {
var queryStringBits = [];
for (var key in queryDict) {
if (queryDict.hasOwnProperty(key)) {
queryStringBits.push(key + "=" + queryDict[key]);
}
}
return queryStringBits.length > 0
? "?" + queryStringBits.join("&")
: "";
}