Как мне поддерживать аргументы GET Url на нескольких страницах с помощью jQuery и PHP? - PullRequest
5 голосов
/ 16 марта 2011

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

Мой код работает отлично. Проблема в том, что при переходе со страницы 1 на страницу 2 я теряю строку запроса.

По другим техническим причинам я не могу использовать метод POST. В частности, мне нужно как-то сохранить это состояние запроса и проверить URL запрашиваемой страницы, а также повторно добавить эту строку запроса, если она пуста.

Есть мысли о том, как это сделать? Сайт использует большое количество jQuery, но я не уверен, что jQuery может запомнить эту строку на нескольких страницах. Сайт также использует PHP. Я не против сохранить результаты в переменной сеанса PHP и затем каким-то образом реконструировать URL, но я надеялся, что это будет немного проще. Спасибо за ваши мысли

синий

Ответы [ 3 ]

2 голосов
/ 21 марта 2011

Я думаю, что лучшим вариантом для такого рода постоянных данных является использование сеанса. Ваш код проверяет две вещи: значение GET и значение сеанса. Мы будем предполагать, если оба присутствуют, вы принимаете значение GET. Это позволяет пользователю отправить новый и переопределить старый.

session_start();
$zip = '';
if($_GET['zip'])
{
    //validate zip as needed
    $zip = $_GET['zip'];
    $_SESSION['zip'] = $zip;
}
elseif($_SESSION['zip'])
{
    $zip = $_SESSION['zip'];
}
else
{
    //handle default case
}

Тогда каждый раз, когда ваш PHP-код должен ссылаться на почтовый индекс для запросов и т. Д., Используйте значение в $zip. Таким образом, вы не полагаетесь на саму страницу для обработки значений zip - вы сохраняете ее на сервере и используете в любое время, когда вам это нужно.

2 голосов
/ 16 марта 2011

Вы можете попробовать добавить его ко всем <a href> элементам, но тогда только ссылки <a> передадут строку запроса на другие страницы.В любом случае, вы можете сделать это:

$('a').each(function() {
    $(this).attr("href",
                 $(this).attr("href") + 
                 (location.search == '' ? '?' : '&') + 
                 location.search.substring(1));
});

Амперсанд должен убедиться, что любые данные строки запроса отделены от новых данных, в то время как '?'добавляется, если в данный момент нет строки запроса.substring(1) используется для удаления ведущего ?, который уже появляется в location.search.

Я только что понял, что это не работает, если <a> еще не имеет ?, но это не должно быть слишком сложно исправить.

0 голосов
/ 16 марта 2011

Какой код вы используете для нумерации страниц?

Если я правильно понимаю проблему, вам нужно всего лишь добавить поисковый запрос и почтовый индекс в URL "Перейти на страницу 2" и т. Д.

Упрощенная версия:

<a href="results.php?page=2&<?php
    echo 'query=' . rawurlencode($_GET['query']);
    if (isset($_GET['zip'])) echo '&zip=' . rawurlencode($_GET['zip']);
?>">Next page</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...