私はここで少し悪夢を見ているので、助けていただければ幸いです! まず、私がやろうとしていることを説明します。
ここで説明されているようなシステムを実装しようとしています: https://stackoverflow.com/a/1086448/1034392 Yii フレームワークを使用して私のローカルホスト MAMP サーバーに。DB に新しい通知があるかどうかをチェックする関数があります。ある場合は、それらを解析し、json でエンコードします。この関数は、5 秒ごとに while ループで呼び出されます。
したがって、 /user/unreadNotifications に移動すると、次のトリガーが発生します
Yii::log('test'); // to check it's getting called
$this->layout=false;
header('Content-Type: application/json');
// LONG POLLING
while (Yii::app()->user->getNotifications() == null) {
sleep(5);
}
echo Yii::app()->user->getNotifications(); // prints out json if new notification
Yii::app()->end();
return;
これは正常に動作します - ブラウザのリンクに移動し、json 応答を確認しました - すべて問題ありません。
次に、あらゆる種類のjQueryを試して動作させました...動作することがわかった唯一の方法は$.ajax
、POSTタイプで使用することですが、待機中の通知がある場合にのみです(したがって、jsonが返されます)。$.get
または$.post
「中止」されます(firebugに表示されます)が、URLが呼び出されます(ログファイルが更新されていることがわかるため)-奇妙な。
使用している私の元のセットアップ$.get
は次のとおりです。
<script type="text/javascript">
function notificationPoll() {
$.get('<?php echo Yii::app()->createUrl('user/unreadNotifications') ?>','', function(result) {
$.each(result.events, function(events) {
alert('New Notification!');
});
notificationPoll();
}, 'json');
}
</script>
<script type="text/javascript">
$(document).ready(function() {
$.ajaxSetup({
timeout: 60 //set a global ajax timeout of a minute
});
notificationPoll();
});
</script>
これは、何らかの理由で「中止」されます。CORSリクエストではありませんが、「jsonp」で試しましたが、うまくいきません。
これではどこにも行けないようです!誰でも参加できますか?
どうもありがとう