Подтвердить что ты не робот

JQuery/Javascript - перезагрузить текущую страницу с помощью прилагаемого запроса?

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

Как мне это сделать?

4b9b3361

Ответ 1

Это старый вопрос, но он появился первым в результатах поиска 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'})

Ответ 2

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('&');
});

Ответ 3

Если вы перейдете с самым высоким ответом, вы можете захотеть заменить

http://

в коде с

window.location.protocol

чтобы он работал для других протоколов, таких как https или file. Так

window.location.href = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + params.join('&');

Ответ 4

Если вам нужен действительно простой способ сохранить строку запроса и, возможно, добавить к ней, используйте window.location.search; здесь фрагмент:

var search = window.location.search + (window.location.search ? "&" : "?");
                search += "param1=foo&param2=bar";
                window.location.href = window.location.protocol + "//" + window.location.host + window.location.pathname + search;

Вы можете, конечно, использовать более сложный способ построения остальной строки запроса, как показано в других примерах, но ключ заключается в использовании Location.search.

Ответ 5

Если у вас есть существующая цепочка, которую вы хотите сохранить, то эта версия делает это и добавляет ваши новые параметры к любым существующим. Клавиши преобразуются в строчные буквы, так что дубликаты не добавляются. Поддержание 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("&")
        : "";
}