1

JSON ソースをロング ポーリングし、その結果で div を更新するスクリプトを作成しました。私のコードは以下に掲載されています。

コードは正常に動作し、要求したデータは取得され、正しく出力されます。このコードは JSON をチェックし、2 つの画像といくつかのテキスト データを取得します。

問題は、データの更新と画像のダウンロードが頻繁に行われるため、サーバーの負荷と帯域幅の消費が高くなることです (明らかに、これは現在は小さいですが、プロジェクトが完了するにつれて増加します)。これにより、div 内のテキストを選択できなくなり、リロード時に画像がちらつきます。どちらも現在のコードの望ましくない結果です。

JSON応答でデータが実際に変更されるまで、データを取得して表示し、まったく更新しないようにしたいのですが、タイムスタンプで何かをする必要があると思いますか?. JSON の first_aired キーを使用して lastupdate タイムスタンプを作成しようとしましたが、うまくいきません。間違いを犯したのか、間違ったツリーを鳴らしているのかわかりません。

誰かが私が持っているコードを見て、おそらく私が何をする必要があるかについて正しい方向に私を向けることができますか?

var lastupdate = 0;
// call getData when the document has loaded
$(document).ready(function(){
getData(lastupdate);
});
var getData = function(lastupdate) {
$.ajax({
  type: "GET",
  url: 'http://api.trakt.tv/user/watching.json/apikey/user/lastupdate='+lastupdate+'&callback=?',
  dataType: 'jsonp',
  async: true,
  cache: false,
  // timeout after 5 minutes, shut process down and restart
  timeout:300000,
  // process a successful response
  success: function(watching_now) {
    if (!jQuery.isEmptyObject(watching_now)) {
    //console.log(watching_now);
    var airDate = watching_now.episode.first_aired;
    var showTitle = watching_now.show.title;
    var showPoster = watching_now.show.images.poster;
    var showURL = watching_now.show.url;
    var episodeTitle = watching_now.episode.title;
    var episodeScreen = watching_now.episode.images.screen;
    var episodeNumber = watching_now.episode.number;
    var episodeSeason = watching_now.episode.season;
    $('#watching-now').html('<div class="screencap"><img src="' + episodeScreen +' " width="240" height="150" /></div><div class="poster"><a href="'+showURL+'" target="_blank"><img src="' + showPoster +'" width="85" height="120" /></a></div><div class="watching-info">'+episodeSeason+'x'+episodeNumber+' - '+episodeTitle+'</div>')
    }
    else {
    $('#watching-now').html('You are not currently watching anything')
    }
    // set lastupdate
    lastupdate = watching_now.airDate;
    // call again in 1 second
    setTimeout('getData('+lastupdate+');', 1000);
    },
    // handle error
  error: function(XMLHttpRequest, textStatus, errorThrown){
    // try again in 10 seconds if there was a request error
    setTimeout('getData('+lastupdate+');', 10000);
},
});
};

情報フォームを取得している JSON は次のとおりです。

{"type":"episode","action":"watching","show":{"title":"Stargate Atlantis","year":2004,"url":"http://trakt.tv/show/stargate-atlantis","imdb_id":"tt0374455","tvdb_id":"70851","tvrage_id":"5324","first_aired":1089961200,"country":"United States","overview":"The story of Stargate Atlantis follows the cliffhanger episode on Stargate SG-1's seventh season finale \"Lost City\", where SG-1 found an outpost made by the race known as the Ancients in Antarctica. After the events of Stargate SG-1 season eight premiere \"New Order\", the Stargate Command sends an international team to investigate the outpost. Soon, Dr. Daniel Jackson discovers the location of the greatest city created by the Ancients, Atlantis. The story unfolds when the members of the expedition encounter the Wraith, the race that defeated the Ancients ten thousand years ago.","runtime":60,"network":"Syfy","air_day":"Monday","air_time":"9:00pm","certification":"TV-PG","images":{"poster":"http://trakt.us/images/posters/329.3.jpg","fanart":"http://trakt.us/images/fanart/329.3.jpg","banner":"http://trakt.us/images/banners/329.3.jpg"},"genres":["Action","Adventure","Science Fiction"]},"episode":{"season":3,"number":10,"title":"The Return (1)","overview":"The Atlantis expedition is stunned to learn that a ship full of Ancients is returning to reclaim their lost city. ","first_aired":1158908400,"url":"http://trakt.tv/show/stargate-atlantis/season/3/episode/10","images":{"screen":"http://trakt.us/images/episodes/329-3-10.3.jpg"}}}

さらに詳しい情報が必要な場合は、お尋ねください。できる限りのことを提供します。

乾杯

4

1 に答える 1

1

以下のリンクに示されている例を見てください。

http://www.zeitoun.net/articles/comet_and_php/start

タイムスタンプを渡し、現在のタイムスタンプと渡されたタイムスタンプの間のレコードを取得します。

于 2013-02-26T11:29:52.047 に答える