2012-02-25 3 views
3

Так что я пытаюсь установить часовой пояс php через javascript, так что пользователи автоматически имеют время, установленное правильно на их timezome. Теперь я нашел этот код в Интернете, но, к сожалению, он передает определенное значение javascript через значение GET. Есть ли способ, которым я могу использовать это, но не требует включения значения GET в URL? поскольку это происходит, чтобы сломать мой сайт из-за того, как установлены .htaccess ReWriterules.

Вот код для часового пояса. Мне нужен способ передачи определенного значения смещения из javascript в php без использования GET в URL-адресе. Это возможно?

<?php 
session_start(); 
if(!isset($_SESSION['timezone'])) 
{ 
    if(!isset($_REQUEST['offset'])) 
    { 
    ?> 
    <script> 
    var d = new Date() 
    var offset= -d.getTimezoneOffset()/60; 
    location.href = "<?php echo $_SERVER['PHP_SELF']; ?>?offset="+offset; 
    </script> 
    <?php  
    } 
    else 
    { 
     $zonelist = array('Kwajalein' => -12.00, 'Pacific/Midway' => -11.00, 'Pacific/Honolulu' => -10.00, 'America/Anchorage' => -9.00, 'America/Los_Angeles' => -8.00, 'America/Denver' => -7.00, 'America/Tegucigalpa' => -6.00, 'America/New_York' => -5.00, 'America/Caracas' => -4.30, 'America/Halifax' => -4.00, 'America/St_Johns' => -3.30, 'America/Argentina/Buenos_Aires' => -3.00, 'America/Sao_Paulo' => -3.00, 'Atlantic/South_Georgia' => -2.00, 'Atlantic/Azores' => -1.00, 'Europe/Dublin' => 0, 'Europe/Belgrade' => 1.00, 'Europe/Minsk' => 2.00, 'Asia/Kuwait' => 3.00, 'Asia/Tehran' => 3.30, 'Asia/Muscat' => 4.00, 'Asia/Yekaterinburg' => 5.00, 'Asia/Kolkata' => 5.30, 'Asia/Katmandu' => 5.45, 'Asia/Dhaka' => 6.00, 'Asia/Rangoon' => 6.30, 'Asia/Krasnoyarsk' => 7.00, 'Asia/Brunei' => 8.00, 'Asia/Seoul' => 9.00, 'Australia/Darwin' => 9.30, 'Australia/Canberra' => 10.00, 'Asia/Magadan' => 11.00, 'Pacific/Fiji' => 12.00, 'Pacific/Tongatapu' => 13.00); 
     $index = array_keys($zonelist, $_GET['offset']); 
     $_SESSION['timezone'] = $index[0]; 
    } 
} 
date_default_timezone_set($_SESSION['timezone']); 

Мне сказали, что это может быть возможно с помощью JSON, но после чтения онлайн чат не в состоянии понять нотации правильно использовать это.

+0

Если я правильно понимаю, вы пытаетесь получить часть данных на сервер в HTTP-запросе с клиентской стороны без использования параметров URL. Вы можете подумать о переписывании имени страницы (зависит от того, что позволяет ваш сервер, возможно, не так много от того, что вы сказали), или другой маршрут, на который нужно смотреть, - это файлы cookie. –

+0

Да, это то, что я пытаюсь сделать, переписывая параметры параметров URL в 404s, которых у меня не может быть. – JimmyBanks

+1

Если решение POST, упомянутое ниже, не будет работать, я бы экспериментировал с записью данных в сторону клиента cookie (document.cookie = ".... = ....") и чтения той же стороны сервера данных $ _COOKIE ['....'] –

ответ

4

Если вы не хотите использовать запрос GET, вы можете вместо этого использовать запрос POST. Вы можете отправить данные с помощью запроса Ajax в JavaScript. Использование JQuery, это будет выглядеть что-то вроде:

$.ajax({ 
    'url': 'PATH_TO_PHP_SCRIPT', 
    'type': 'POST', 
    'data': 'timezone=' + timezoneVariable 
}); 
+0

yeh. это сработает. но он хочет переменную смещения, а не часовой пояс ... поэтому отправьте смещение, как говорит timothy, и получите его со смещением = $ _POST ['offset'] –

1

Если вы не хотите использовать JSON и AJAX (XMLHttpRequest), вы можете использовать cookies. Поскольку оба javascript и php могут читать их, создайте один, используя javascript для хранения часового пояса. Затем в вашем PHP-коде прочитайте этот файл cookie.

для создания куки в JavaScript Использование:

document.cookie = 
    'myName=' + value + 
    '; expires=' + now.toGMTString() + 
    '; path=/'; 

и читать его в PHP:

$_COOKIE['myName'] 
0

Вы можете просто получить/ВЫВЕШУ URL, как /tz/TIME_ZONE где TIME_ZONE является то, что часовой пояс вы хотите установить.

Смежные вопросы