4

AJAX の標準またはメッセージング フレームワークはありますか?

現在、Ajax を使用してコンテンツをロードする 1 つのページがあります。コンテンツの一部としてデータ入力用の複雑なフォームがあったため、フォームで発生する可能性がある特定のイベントを検証する必要があります。したがって、私のテストによって引き起こされたいくつかの調整の後:

asyncShould("search customer list click", 3, function() {
    stop(1000);
    $('#content').show();
    var forCustomerList = newCustomerListRequest();
    var forShipAndCharge = newShipAndChargeRequest(forCustomerList);

    forCustomerList.page = '../../vt/' + forCustomerList.page;
    forShipAndCharge.page = 'helpers/helper.php';
    forShipAndCharge.data = { 'action': 'shipAndCharge', 'DB': '11001' };

    var originalComplete = forShipAndCharge.complete;

    forShipAndCharge.complete = function(xhr, status) {
        originalComplete(xhr, status);
        ok($('#customer_edit').is(":visible"), 'Shows customer editor');
        $('#search').click();
        ok($('#customer_list').is(":visible"), 'Shows customer list');
        ok($('#customer_edit').is(":hidden"), 'Does not show customer editor');
        start();
    };

    testController.getContent(forShipAndCharge);
});

コンテンツを取得するためのコントローラーは次のとおりです。

    getContent: function (request) {
        $.ajax({
            type:       'GET',
            url:        request.page,
            dataType:   'json',
            data:       request.data,
            async:      request.async,
            success:    request.success,
            complete:   request.complete
        });
    },

そして、ここにリクエストイベントがあります:

function newShipAndChargeRequest(serverRequest) {
var that = {
    serverRequest: serverRequest,
    page: 'nodes/orders/sc.php',
    data: 'customer_id=-1',
    complete: errorHandler,
    success: function(msg) {
        shipAndChargeHandler(msg);
        initWhenCustomer(that.serverRequest);
    },
    async: true
};
return that;

}

そして、成功ハンドラは次のとおりです。

function shipAndChargeHandler(msg) {
    $('.contentContainer').html(msg.html);
    if (msg.status == 'flash') {
        flash(msg.flash);
    }
}

サーバー側では、最終的に次のような JSON 構造になります。

$message['status'] = 'success';
$message['data'] = array();
$message['flash'] = '';
$message['html'] = '';
echo json_encode($message);

したがって、コンテンツのロードは次の 2 つの部分で構成されます。

  • HTML、これはフォームのプレゼンテーションです。
  • DATA、これはフォームにロードする必要があるデータです
  • FLASH、検証またはサーバー エラー
  • STATUS は、サーバーで何が起こったかをクライアントに伝えます。

私の質問は次のとおりです。これは、クライアント側でイベント メッセージングを処理する有効な方法ですか、それとも心痛と痛みの道をたどっていますか?

4

4 に答える 4

2

これはhttp://www.jboss.org/erraiを見る価値があると思います

于 2010-05-26T15:13:08.017 に答える
2

OpenAjax Hub (OpenAjax Alliance から) は、パブリッシュ/サブスクライブ ベースのイベント ハブ (トピック バス) を指定します。オープンソースのリファレンス実装をご覧ください: http://openajaxallianc.sourceforge.net/

TIBCO にはPageBusと呼ばれる JavaScript で実装されたイベント バスもありますが、上記の方がより「標準的」であると思います。

于 2010-05-29T17:23:25.457 に答える
1

1 つの msg ハンドラーをゼロから作成することで、なぜ心痛と苦痛の道をたどりたいのですか? すでに jQuery のような js ライブラリを使用している場合、そしてもちろん、グローバル Ajax イベント ハンドラーのような鋭利なブレードの完全なセットと、メッセージのスタイルを設定するためのテーマ ローラーのような css ライブラリを持っています!?

他のSO仲間がすでに述べたように:これはjQueryページからのものです:

Ajax リクエストが正常に完了したときにメッセージを表示します。

$("#msg").ajaxSuccess(function(evt, request, settings){
      $(this).append("<li>Successful Request!</li>");
      });

次に、私にできることは、おそらく、このツールをより適切に使用するように指示することです。

典型的なAJAXエラーを探しているわけではありませんが、これをフォーム検証の目的で使用したいので、次のようなものを提案できます:

$.ajaxComplete(function(event, xhr, options) {
    var data = xhr.responceText;
    switch(data) {
    case 'err_1': 
    // do_something(1)
    break;
    case 'err_2': 
    // do_something(2)
    break;
    case 'err_3': 
    // do_something(3)
    break; 
    }
});

すべてのデータを検証した後、それぞれerr_#がバックエンドから来る場合、エラーが見つかった場合は、コード エラーを ajax 経由で送信します。残りは砂糖です。;)

PS: これを行うことで、javascript が無効になっている場合でも悪用を防ぐことができます!

于 2010-06-01T11:06:08.423 に答える
1

@dan-heberden の提案に投票します: api.jquery.com/ajaxComplete または api.jquery.com/ajaxSucces を使用して、たとえば次のように jquery で ajax イベントを処理します。

$('.contentContainer').ajaxSuccess(function(e, xhr, settings) {
  var msg.html = "<p>You did it!</p>";
  shipAndChargeHandler(msg);
});

あなたの問題にフレームワークは必要ありません。jquery自体を受け入れてください。

于 2010-05-31T19:13:43.227 に答える