奇妙な問題を見つけました。
私は自分のウェブアプリでコメットへの第一歩を踏み出しています。簡単に言えば、PHPコントローラーから送信される別のスクリプトをポーリングする素敵な小さなスクリプトがあります。
後で、私は両方の方法で働きます。longpolling と同じように、または現在のように - JavaScript の間隔で。
Chrome での動作: 「準備完了」イベントで、最初のスクリプトは、コントローラーに ajax 要求を送信する関数の間隔を設定します (名前を「ping.php」にしましょう)。ajax が成功した場合、msg は div#wrapperForJs の html コンテンツを置き換える必要があります。
Ping.php は、データベースの更新をチェックし、スクリプト エコーで 1 つのスクリプト結果を満たしているかどうかを確認します。
上記のテキストはヒューマニスト向けでしたが、現在は tl;dr:
jQuery コード:
function pingThatApp(){
$.ajax({
type: 'GET',
url: '/ping',
success: function(msg){
$('#pingWrapper').html(msg);
}
});
}
$(document).ready(function(){
window['pingLoop'] = setInterval(
function(){
pingThatApp();
},4000
);
});
PHP エコー:
$timeScrpt = '<script>';
foreach ($timers['p'] as $k => $v) {
$timeScrpt .= "$('#project-{$k} .pTime').fadeOut().attr('title', 'Time spent already: {$v}').html('{$v_short}').fadeIn();";
}
foreach ($timers['t'] as $k => $v){
$timeScrpt .= "$('#timeSpent-task-{$k} b').fadeOut().html('{$v}').fadeIn();";
}
$timeScrpt .= '</script>';
Chrome ではすべてがうまく機能します。ただし、Safari にはそのスクリプトに関するいくつかの問題があります。問題は、Safari が jQuery オブジェクトを見つけられないようです。
console.log テストを作成し、コードをチェックしました - 出力は良さそうです。
$k 変数を変更して int でハードコーディングするか、反復の開始時に $k 変数を上書きすると、Safari でも機能します (jQuery が要素を見つけます)。
また、見つかった要素の長さで console.log テストを作成します。
el = $('#project-$k .pTime'); console.log(el.length);
Chrome は (0,0,0,1,1,1,0) [0 not found, 1 - found0 のようなものを出力します。Safari は常に 0 を出力します。
その貴重なブラウザで何が起こっているのかわからないので、ここに書いています。多分誰かがここに解決策を持っています。
また、間隔はデータ更新の目的には適していないと私に納得させようとしないでください。私はそれを知っていますが、今のところそれが私が実装できる最高のものです。