2

ユーザーがページにアクセスしてページを離れたときに、他のページの詳細とともにいくつかのデータを保存する簡単なスクリプトを作成しています。スクリプトは「機能」しますが、常に機能するとは限りません。散発的に機能しているようです。コンソールエラーが発生しないときに発生しません。サーバー側は正常に動作します。

window.onload = function() {


var timeStarted, i, c, l, timeLeft, pageData; 

timeStarted = new Date().getTime();

i = <?php echo $model->id; ?>;
c = <?php echo $model->cat; ?>;
l= <?php echo $model->loc; ?>;

window.onbeforeunload = function(){

timeLeft = new Date().getTime();

pageData = [{name: 'timeStarted', value: timeStarted}, 
            {name: 'i', value: job},
            {name: 'c', value: cat},
            {name: 'l', value: loc},
            {name: 'timeLeft', value: timeLeft}];

// Set url for JavaSCript
var url = '<?php echo Yii::app()->createUrl("item/viewedItemInformation"); ?>';

<?php echo CHtml::ajax(array(
        'url'=>'js:url',
        'data'=> "js: pageData",
        'type'=>'post',
        'dataType'=>'json',
        )); ?>;             
}
}

ノート

この投稿window.onbeforeunload not working in chromeを読んだところですが、chromeを使用しています。ただし、FFでも同じ結果が得られるようです。

これを解決するための正しい方法は何ですか?

更新 文字通り、それが機能する状況と機能しない状況を伝えることができませんでした。この機能はアイテム ページでのみ使用しています。アイテムページをクリックして別のアイテムにアクセスするために離れると、それが機能することもあれば、それほど散発的ではないこともあります。私が言えることは、ホームページのような非アイテム ページのアイテム ページを離れると、レコードが記録されないということです。

4

3 に答える 3

0

これまでのところ、これは私がそれについて行ってきた方法です。おそらくそれは他の人に役立つでしょう。そうでない場合は、これに問題があり、回答を削除します。

アイテムページをロードすると、識別子、カテゴリ、ID 番号、場所、NOW() を使用して開始された時間で DB を更新し、残りの時間も NOW() として更新します。

次に、ページ自体でこの JavaScript を実行します。

<script>

// Set url for JavaSCript
var url = '<?php echo Yii::app()->createUrl("item/viewedItemInformation"); ?>';
var item = '<?php echo $model->id; ?>';

var data = [{name: 'item', value: item},
    {name: 'async', value: false}];

// call function to see if still on page
var onPage = setInterval(function() {

<?php echo CHtml::ajax(array(
        'url'=>'js:url',
        'data'=> "js: data",
        'type'=>'post',
        'dataType'=>'json',
    )); 
?>              

}, 5000);

そのスクリプトは 5 秒ごとに実行され、DB 内のレコードを検索する別のコントローラー関数を呼び出し、コントローラー関数が呼び出された時間で time_ended を更新しますNOW()

それが理にかなっていることを願って、私はそれを少しテストしただけなので、これでもう少しやる必要があります. 誰かが問題を見つけたら、私に知らせてください。

アップデート

これまでのところ、このスクリプトは正常に機能しているようです。私はローカルホストでのみ作業しており、LinkedIn プラグインを使用していますが、スクリプトの動作が停止しているようです。このエラーが何度も発生します。これまでに気づいたことはありません。最近、XAMPP を再インストールしたので、セットアップ間のその他の違いを認識していない可能性があります。また、プラグインが JS スクリプトの動作を停止しているように見える理由もわかりません。

Origin http://localhost is not allowed by Access-Control-Allow-Origin.

ジョニー

于 2013-11-20T22:55:18.937 に答える