2016-09-21 130 views
0

在我的應用程序中,我有一個AJAX調用,在用戶重新加載頁面(查看它們是否切換時區)之前POST用戶的時區(到同一頁面)。不幸的是,我無法訪問該帖子變量。ajax調用後訪問post變量

$(window).on('beforeunload', function() { 
    $.ajax({ 
     type: "POST", 
     url: "ToDoApp.php", 
     data: { 
      timezone: userTimeZone 
     }, 
     dataType: 'text' 
    }); 
}); 

我敢肯定這是因爲我的AJAX調用過程中,其次,當頁面重新加載實際重裝一次。但是,我一直在圈子裏呆了一個小時,似乎無法解決我的問題。

一旦頁面重新加載,我怎樣才能獲得timezone變量?

如果還有更好的方法來解決這個問題,我可以提出建議。


更多信息:

我需要在服務器端的時區變量進行時區轉換,因此我的AJAX調用。從下面我的評論:

所以這裏的兩難境地:我知道時區是更好的計算客戶 一側,我與Moment.JS做,但我需要的時區變量 做服務器側的時區轉換顯示該日期正確地爲 用戶。這就是爲什麼我[我想]需要一個AJAX呼叫,因爲沒有它 一旦頁面重新加載我的時區將只能在客戶端 側和我不能執行我的計算。

+2

你不能可靠地使一個Ajax請求,當用戶離開,因爲沒有保證在瀏覽器關閉之前的請求將被完成。 – adeneo

+2

我懷疑這裏存在大量的X/Y問題。如果您要重新加載頁面,爲什麼首先需要ajax調用? (這可能不起作用,請參閱adeneo的評論。)如果你需要客戶端的這個信息,把它存儲在客戶端(比如'sessionStorage'),但是好像我們對你的'如果真的想要完成,我們可以指出你朝着更好的方向發展。 –

+0

@TJCrowder有***可能是巨大的問題:D所以這裏的困境:我意識到時區更好地計算客戶端,我正在做Moment.JS,但我需要時區變量做服務器端時區轉換可正確顯示用戶的日期。這就是爲什麼我[我想]需要一個AJAX調用,因爲沒有它,一旦頁面重新加載我的時區將僅在客戶端可用,我不能執行我的計算。我剛剛在這裏走了一圈嗎? –

回答

1

您可以使用JavaScript的的sessionStorage ...請執行下列操作..

//set this anywhere you want in your .js script; 
sessionStorage.setItem('TheTimeZone',userTimeZone); 

//get the timezone using sessionStorage 
$(window).on('beforeunload', function() { 
    $.ajax({ 
     type: "POST", 
     url: "ToDoApp.php", 
     data: { 
      timezone: sessionStorage.getItem('TheTimeZone') 
     }, 
     dataType: 'text' 
    }); 
}); 

這應該工作。

+0

@ Govind:這裏的關鍵在於,即使在頁面重新加載之後,通過'sessionStorage.getItem'也可以在其他地方獲取它(例如,不在'beforeunload'中)。 –

0

你不能。您必須編寫應用程序才能在回調中訪問userTimeZone值。也許只是在請求結果返回請求變量?這樣我建議使用JSON代替文本格式。您可以從腳本 ToDoApp.php

echo json_encode(array('post'=>$_POST, result=>$result)); 

返回,並訪問他們在回調,如:data.post,data.result。

0
$(window).on('beforeunload', function() { 
    if (typeof(Storage) !== "undefined") { 
     localStorage.setItem("timeZone",new Date().getTimezoneOffset()); 
    } else { 
     // Sorry! No Web Storage support.. 
    } 
    $.ajax({ 
     type: "POST", 
     url: "ToDoApp.php", 
     data: { 
      // new Date().getTimezoneOffset() gives clients timezone 
      timezone: localStorage.getItem("timeZone") 
     }, 
     dataType: 'text' 
    }); 
}); 

更多:w3school on timezone

+0

請讓我知道它是否適用於你..如果工作,請upvote並接受作爲回答提前致謝 –

+0

感謝您的回答veshraj。這個答案的問題是,一旦頁面完成重新加載,該變量就不可用。這幾乎是我已經擁有的,並且數據在Ajax帖子但是重新加載後不可用時可用。 –

+0

好吧,然後利用本地存儲 –