2011-02-01 2 views
2

XMLをファイルまたは標準出力に出力するWebサーバー上の実行可能ファイルがあります。 XMLには、テーブルに変換したいデータが含まれています。このXMLはユーザーごとに一意であり、定期的に変更されます。私のWebページでAjax/jQueryを使用してサーバプロセスのXML出力を使ってテーブルを更新するには?

、私はしたいと思います:

  1. トリガーは

  2. は、このXMLを解析し、動的に追加XMLデータを更新するには、設定された期間(例えば30分)に、この実行可能ファイルを実行しています/#2のトリガの実行

の間でXMLデータの変化に応じてテーブルの行を削除し、私は、サーバー側のXMLファイルをつかむために$.ajax()を使用およびWOことができると思いますrkの内容をinnerHTMLで表をレンダリングし、Webページに追加します。

私がこだわっている部分はアイテム#1だと思います。私のWebページはPerl CGIスクリプトから出力されます。スクリプトが完了すると、HTTP要求は完了し、クライアントとサーバー間の通信はなくなります。

XMLファイルをjQuery Ajax呼び出しが必要に応じてどこかに置くサーバー上で別のプロセスを実行する必要がありますか? (私は、ユーザーがウェブサイトにいるかどうか、ログインしているかどうかなど、多くのプロセスとXMLファイルを管理しなければならないので、これを避けたい)

クライアントサイドのWebページに、Webページをリロードせずに、サーバ側の実行可能ファイルを実行するように頼んだりするのは、よりクリーンな方法でしょうか。トリガされたときに、ページ全体をリロードせずにアクションを呼び出すことができる隠しフォームのようなもの?

申し訳ありませんが、これらはダムの質問です。アドバイスありがとうございます。

+0

完全に愚かな質問ではありません。 IMHOこれはWeb開発の部屋の象です。ドキュメントをポーリングする方法はありません...そして、_changed junk _...だけでDOMを更新してください。ブラウザベンダーの部品に古くからある "セキュリティハングアップ"があると思います。彼らができる限り、サーバー側のクランクに夢中になっている子供たち。私はそう思う... –

答えて

1

jqueryを使用して、あまり頻繁に(たとえば30分)機能を実行し、サーバーにajaxリクエストを行うことができます。次に、サーバーはXMLファイルを実行して要求し、それを解析できるjavascript関数にプッシュします。 あなたの質問を理解する方法は、#1は問題ではありません。 Webページがレンダリングされると、何もする必要はありません。このような

window.setInterval(getXML, 1800000); //will execute the function every 30 minutes 

function getXML() { 

    $.ajax({ 
    type: 'POST', 
    url: http://yourserver.com/somepageorform, 
    data: data, //any data you may need to send 
    success: function(data) { 
     var url = data; 
     $.ajax({ 
      type: 'GET', 
      url: url, 
      success: function(xml) { 
      //process the xml 
     }, 
    dataType: dataType 
    }); 
    }, 
    dataType: dataType 

}); 
} 

これは、サーバーへの非同期呼び出しです。 somepageorformはcgiを実行し、XMLファイルを生成します。 doSomething()関数には、処理が完了するまで実行されないXMLを処理する関数があります。私はCGIがファイルへのパスを返すと仮定します。その場合、関数内で取得して処理することができます。

+0

事は、私はGETリクエストなどでXMLファイルを提供するWebサービスを持っていない。これは、実行可能ファイルが実行されるときに作成または更新される、サーバーのファイルシステムのどこかの一時ファイルになります。サーバーがオンデマンドで実行可能ファイルを実行し、一時的なXMLを生成し、そのXMLをクライアントに送り返すようにAjax呼び出しを設定するにはどうすればよいですか?それは私が欠けている作品です。 –

+0

私は参照してください。実行可能ファイルを実行するシンプルなサーバー側の関数を書いてください。それとも実行可能ではないのですか? – Victor

+0

私はクライアントがページをリロードせずに実行可能ファイルを実行するようにサーバーに指示する方法を探しています。これまでのところ、私は既存のXMLファイルを取得できますが、ファイルを最初に作成する必要があります。実行可能ファイルを実行するCGIスクリプトを呼び出すフォームを定期的に起動する方法があるかどうかは疑問ですが、ページ全体をリロードする必要はありません。 HTMLテーブルを実行して非同期的に更新できるもの。 –

0

ページのjQuery関数を使用してサーバーをポーリングし、変更を確認するか、またはサーバーがクライアントに変更をプッシュするようにすることです。

最初は簡単ですし、サーバーをポーリングするのに役立つrefreshプラグインなどのプラグインがあります。これは最も簡単なアプローチですが、冗長な呼び出しをたくさんする可能性があります。

また、Pusherのようなものを使用して、サーバーにファイルが生成された後にクライアントに通知を送信することもできます。これはもう少し複雑ですが、更新がクライアントに送信されるタイミングをより詳細に制御できます。

2

正直言って、私は30分のポーリングを実行するためにJQueryを使用するという考え方は、クライアント側に厳密に依存しているので嫌いです。私があなたのウェブページを7つの異なったブラウザで一度に開くところの私と同じようなユーザがいる場合:D、基本的に、このユーザは同じPerl CGIスクリプトを30分ごとに7回実行するようにサーバに依頼します。さらに、ユーザーがWebページを数分間しか訪れない場合、JQueryはPerl CGIスクリプトを起動する機会を決して与えません。

スクリプトがWebサービスとして利用できない場合(最初は理想的です)、実行可能な唯一の方法は、cronジョブを使用して30分ごとにスクリプトを実行するようにスケジュールすることです。確かにそれは別のプロセスであり、私はそれも嫌いですが、少なくとも、データを更新したままユーザーに頼るのではなく、すべてのユーザーが30分ごとにデータを更新するようにすることができます。

私の1.5セント。 :)

+0

あなたは良い点を持っていますが、それはクライアント側とサーバー側の両方で簡単に管理できます。彼が言及したように、彼はファイルを生成するためにサーバー側のプロセスを実行することに熱心ではありません。 – Victor

関連する問題