2016-09-21 18 views
0

私のアプリでは、ユーザがページをリロードする直前(同じタイムラインにタイムゾーンを切り替えたかどうかを確認する)に、ユーザのタイムゾーンをPOSTするAJAXコールがあります。残念ながら、私はそのポスト変数にアクセスすることはできません。ajaxコール後のアクセスポスト変数

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

私は、ページが実際にリロードするとき、私は第二AJAX呼び出し中に一度リロードしていますので、それはだかなり確信しています。しかし、私は1時間サークルに入っていて、私の問題を解決できないようです。

ページをリロードしたら、どのようにタイムゾーン変数を取得できますか?

問題を完全に解決するためのよりよい方法がある場合は、私は提案することができます。


さらに詳しい情報:

私はので、私のAJAX呼び出し、タイムゾーンの変換を実行するためにサーバー側でタイムゾーン変数が必要です。以下の私のコメントから:

だからここにジレンマだ:私は、タイムゾーンを実現し、私はMoment.JSでやっているよりよく計算されたクライアント 側ですが、私は表示するために、サーバ側のタイムゾーンの変換を行うためのタイムゾーン変数 を必要としますユーザーは に正しく設定されています。だから、私はAJAXコールが必要だと思うのですが、それがなければ ページがリロードされると私のタイムゾーンはクライアント 側でのみ利用可能になります。私は計算を実行できません。動作するはずですあなたが... javascriptのののsessionStorageを使用して次の操作を行うことができます

+2

ユーザーが離れたときに、ブラウザを閉じる前に、要求が行われることになるという保証がないのであなたは確実に、AJAX要求を行うことができません。 – adeneo

+2

大きなX/Y問題はここにあると私は疑う。ページをリロードしようとしている場合は、まずajaxコールが必要ですか? (おそらくうまくいきません、adeneoのコメントを参照してください)クライアント側でこの情報が必要な場合は、クライアント側に保存します(例えば 'sessionStorage'など)。しかし、本当に達成しようとしている、我々はより良​​い方向にあなたを指すことができます。 –

+0

@TJCrowderそこには***多分大きな問題があります:Dだからここにジレンマがあります:タイムゾーンが私がMoment.JSでやっているクライアント側を計算したほうが良いと思いますが、サーバーサイドを行うためにタイムゾーン変数が必要ですタイムゾーン変換を使用して、日付をユーザーに正しく表示します。だから私はAJAXコールが必要だと思うのですが、それがなくてもページがリロードされると私のタイムゾーンはクライアント側でしか利用できなくなり、私の計算を実行できなくなるからです。私はちょうどここに円で行きましたか? –

答えて

1

..

//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:ここで重要な点は、ページのリロード後であっても、 'beforeunload'以外の場所に置くことが' sessionStorage.getItem'を介して*可能であることです。 –

0

できません。コールバックでuserTimeZoneの値にアクセスできるようにするには、アプリを書く必要があります。リクエスト結果にリクエスト変数を返すだけでしょうか?このようにして、テキスト形式の代わりにJSONを使用することをお勧めします。 、data.resultをdata.post:あなたはスクリプト ToDoApp.php

echo json_encode(array('post'=>$_POST, result=>$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

私はそれがあなたのために働くかどうかを教えてください。働いていれば、事前に回答していただきありがとうございます。 –

+0

あなたのお返事ありがとうございますveshraj。この回答の問題は、ページのリロードが完了した後で変数を使用できないことです。これは私がすでに持っているものであり、Ajaxの投稿時にはデータが利用可能ですが、リロード後には利用できます。 –

+0

OKローカルストレージを使用 –

関連する問題