2012-02-25 62 views
3

所以即時嘗試設置通過JavaScript的PHP時區,所以用戶自動有時間設置正確的時間。現在我在網上找到了這個代碼,但不幸的是它通過GET值傳遞了javascript的確定值。有沒有一種方法可以使用它,但不需要在URL中包含GET值?因爲這是由於如何設置.htaccess ReWriterules而導致我的網站崩潰。

這裏是時區的代碼。我需要的是一種將確定的偏移值從javascript傳遞到php而不使用URL中的GET的方法。這可能嗎?

<?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。 – 2012-02-25 21:22:48

+0

是的,這是我想要做的,重寫URL參數結果在404s,我不能。 – JimmyBanks 2012-02-25 21:25:55

+1

如果下面提到的POST解決方案不起作用,我會嘗試將數據寫入cookie客戶端(document.cookie =「.... = ....」)並讀取相同的數據服務器端$ _COOKIE ['....'] – 2012-02-25 21:30:53

回答

4

如果您不想使用GET請求,則可以考慮使用POST請求。您可以使用JavaScript中的Ajax請求發送數據。使用jQuery,這看起來是這樣的:

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

yeh。那會做。但他想要的偏移量變量,而不是時區...所以發送偏移像timothy說,並得到它與偏移= $ _POST ['偏移'] – 2012-02-25 22:05:32

1

如果你不想使用JSON和Ajax(XMLHttpRequest的),你可以使用cookies。 由於javascript和php都可以讀取這些內容,因此請使用javascript創建一個用於存儲時區的文件。然後在你的php代碼中讀取該cookie。

創建在JavaScript中使用一個Cookie:

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

,並在你的PHP來閱讀:

$_COOKIE['myName'] 
0

你可以簡單的GET/POST像/tz/TIME_ZONE的URL,其中TIME_ZONE是什麼時區你想要設置。

相關問題