1

サーバーにいくつかのリクエストを行う必要がある JavaScript で複雑なアプリケーションを構築しています。その要求を送信したとおりに完了できない場合があり、追加情報が必要になります。サーバーが要求の応答で、さらに情報が必要であることをアプリケーションに通知し、その情報を取得する方法を説明できるようにしたいと考えています。

たとえば、ユーザーが現在の権限レベルで許可されていない操作を実行しようとしたとします。サーバーは、アプリケーションにオーバーライド認証コードを要求する必要があります。つまり、アプリケーションは、管理者パスコードを要求するダイアログを表示する必要があります。

これらすべてを抽象化する何らかのフレームワークが必要です。メインの「リクエスト」または「操作」クラスの可能性があり、リクエストの可能な解釈を定義するサブリクエストクラスを定義できます。このようなものがすでに存在するかどうかはわかりません。

だから私の質問は次のとおりだと思います:1)このようなフレームワークは存在しますか?2)このトピックに関する記事はありますか(プラットフォームや言語にとらわれず、どのソースからでもそれらがどのように機能するかを学ぶことができます)。Dojo や ExtJS などのフレームワークがデータ ストアにそのようなものを使用していることは知っていますが、それがまさに私が必要としているものなのか、それともどのように機能するのかはわかりません。

私を正しい方向に導く助けをいただければ幸いです。ありがとうございます。

編集:

そのデータを実際にサーバーに送信するために使用されるテクノロジーから抽象的なものを探しているという点を指摘する必要があります。そうすれば、異なる ajax テクノロジで同じフレームワークを利用できます。

基本的に、カスタムの「アプリケーション プロトコル」を作成する方法を理解するのに役立つフレームワークまたは記事を探しています。この例は次のようになります。

{
    type: 512,
    success: true,
    data: { some: "data" }
}

onSuccessプロトコル自体を設計する必要があることはわかっていますが、助けが必要なのは、冗長なコールバックを作成するのではなく、このプロトコルを自動的に解釈する「クラス」または何かを作成することです

4

7 に答える 7

2

私は、あなたが望むことを(ある程度)行うPomegranate Frameworkという名前のオープンソースプロジェクトに取り組んできました。おそらく、ニーズを満たすために拡張することができます。要求に近いアプリケーション層が付属していますが、それに合うようにプロトコルを実装する必要があります。そのアドレスは次のとおりです。

ザクロのフレームワーク

私はまだそれを文書化する時間が見つかりませんでしたが、役に立つかもしれない多くの例が付属しています. サンプル ページもご覧ください。

ザクロ フレームワークの例

「クライアントでのサーバー エラーの処理」というタイトルの 021 の例をご覧になりたいと思います。それがあなたが探しているものであることを願っています。

于 2012-08-06T05:21:34.580 に答える
1

クライアントでのアプリケーションの状態がわかっている場合 (そして、エラーの原因がほとんどなく、サーバーからの詳細な情報は必要ない場合)、HTTP ステータス コードを使用できますし、使用する必要があります。私が知る限り200、本体を持つのは唯一のものなので、他のものを送信することはできません (またはすべきではありません。常にヘッダーを追加していますが、そのパスは避けたいと思います)。ただし、すべてのフレームワークが提供する必要があります。リクエストの送信時にエラー ハンドラを渡す手段。エラー ハンドラとして渡すコールバック関数では、それぞれのステータスが要求することを実行するだけです。

HTML、JSON、またはその他のものを渡すかどうかに関係なく、プロトコルによってサポートされており、ステータス コードに基づくエラー コールバックは、使用する価値のあるすべてのライブラリでサポートされています。

于 2012-08-07T12:22:05.860 に答える
1

コールバックにはDojojQueryDeferredオブジェクトを使用します。Promiseデザインパターンの実装です。すべてのアクションには成功コールバック チェーンと失敗コールバック チェーンがあり、両方のチェーンはチェーンに沿ったさまざまなポイントで分岐またはマージでき、チェーンは分岐してサブ遅延を作成できます。

于 2012-08-06T04:59:35.737 に答える
0

サーバープッシュの問題のように見えます。つまり、変更が発生した場所でデータがクライアントにプッシュされます。次のオプションがあります

商用 WebSync

このような長いポーリングメカニズムを使用できます

(

function poll(){
    $.ajax({ url: "server", success: function(data){
         myobject.setValue(data.value);

    }, dataType: "json", complete: poll, timeout: 30000 });
})();

詳細はajax push serverで取得できます

于 2012-08-09T04:23:27.537 に答える
0

基本的に「サーバー側のプッシュイベント」について話しているので、サーバースクリプトがクライアントにデータを送信できるようにするためのテクニックが必要です。

COMET、Flash Sockets、および町の最新の WebSockets などのよく知られたメソッドがいくつかあります。

WebSockets はおそらくこれらすべての中で最も洗練されたものであるため、それを目指す必要があります。残念ながら、そのブラウザ サポートは、ほとんどのブラウザで「最新バージョン」に制限されています。それが得意な場合は、すぐに使用してください。古いブラウザーのフォールバックが必要な場合、そのための最も使用されるフレームワークはsocket.IO.

しかし、socketIO でさえ、さまざまな通信手法をすべて抽象化するだけです。とにかく、それを中心にしっかりとした管理フレームワークを自分で構築するのはかなり簡単なはずです。その部分に関する私の答えは、そのようなものを扱うライブラリやフレームワークを知らないということです。

于 2012-07-30T18:42:20.823 に答える
0

ExtJ を使用してこれを実現するには、さまざまな方法があります。

最も基本的なものは、Ext.Ajax.request()urlを使用して、、、を提供することparamsですmethod。次に、成功ハンドラーでサーバーの応答を確認し、ユーザーからの追加データが必要かどうかを確認します。追加の資格情報ダイアログを表示し、サーバー側スクリプトのロックを解除する追加の資格情報の詳細を含む別の要求を送信します。

successrequest メソッドのハンドラは、そのパラメータでリクエストの構成オブジェクトを返すことに注意してください。そのoptionsため、今回は余分な資格情報を追加するだけで、同じリクエストを非常に簡単に再度呼び出すことができます。

これは、この概念を示すjsfiddle コードです(すべての呼び出しに対して成功とグローバル ハンドラーの両方を使用することを示しました。ここからそれを取得する方法を理解できることを願っています)。そして、似たようなもので、あなたが求めているものの方が正確だと思います。

喜んでお手伝いさせていただきます。質問だけしてください。

于 2012-08-06T02:30:35.883 に答える
0

抽象化とテスト容易性が必要な場合は、AngularJS を強くお勧めします。Kris Kowal の Q の実装であるangular $q。サーバーの呼び出し方法を隠し、将来サーバーの実装を変更できるようにするサービスを作成できます。

于 2012-08-09T00:33:42.557 に答える