0

古い MS-DOS Foxpro プログラムを CakePHP に移行していますが、アプリケーション プロセスの一部で、ユーザーがテキスト ファイルを読み込んで、ビジネス ロジックに従って処理する可能性があります。

私はアルゴリズムを操作しましたが、正常に機能しています。プレーンな PHP でプログラムしました。

ただし、プロセスの一部では、ユーザーはいくつかのタスクを実行するために対話する必要がありますが、プレーンな PHP ではそれが可能です。

私の質問は:

ビューに制御を与えるときにコントローラーがデータを処理したため、MVC フレームワークでインタラクティブなファイル処理を行うにはどうすればよいですか?

jQuery-ajax が役に立ちますか?

どう思いますか?

よろしく

アップデート

Borislav Sabevが指摘したように、私はこれを行います:

以下を使用してファイルのアップロードを作成します: jQuery Form Plugin

アップロードされたファイルのデータ構造に従って解析する PHP ファイル。解析されたファイルの内容を JSON でクライアントに返します。

次に、JSON データが ajax POST 経由で処理のために送信されます

$.each(data, function (i, fb) {
    callAJAX(fb);
    });

callAJAX は POST リクエストを送信するだけです

function callAJAX(fb){
    $.ajax({
        type: 'POST',
        url: "proc.php",
        dataType:"json",
        complete: function(r,st){
        },
        success: function(r,st){
            processError(r);
            })
        },
        async: false
    });
}

翻訳エラーがある場合、PHP は JSON を介してクライアントにエラー メッセージを返します。

function proccessError(r)
{
    $.each(r,function(i,d){
        if (d['error'] == 1){
            $.alert('Material not found in translation table','Error');
        }
    })
}

ここで大きな問題:

$.alert ダイアログを開くと、オートコンプリートを介してユーザーに正しいマテリアルを選択してもらいますが、コードはユーザーの選択を待機せず、別の $.alert ウィンドウをポップします。ユーザー入力を待ってから処理を続行するようにjqueryに指示するにはどうすればよいですか?

ところで: これは私が使用する $.alert 拡張機能です:

$.extend({ alert: function (message, title) {
  $("<div></div>").dialog( {
    buttons: { "Ok": function () { $(this).dialog("close"); } },
    close: function (event, ui) { $(this).remove(); },
    resizable: false,
    title: title,
    modal: true
  }).text(message)
  .parents(".ui-dialog:eq(0)").wrap('<div class="error-w"></div>');
}
});
4

1 に答える 1

1

@AD7sixがあなたに言ったことは完全に正しいですが、あなたの質問は非常に曖昧です.

ファイルがアップロードされて処理された後、ユーザーがデータを編集するためのインタラクティブな (リアルタイム?) 方法を提供する必要があると思われますか? . 「行に配置されたデータ」の場合は、DataGrid を提案できます。これを、ファイルの構造を Web で表現したものと想像してください。

「ビューはコントローラーのメソッドまたはアクションの結果を示します」で言おうとしているのは、このケースが通常の HTTP (MVC を使用) フローにあるということです。

ブラウザ (ユーザー) がリクエストを開始=>リクエストがコントローラーで処理される=>モデルが呼び出される (データを取得、保存、または操作する) =>データがコントローラーに返される=>コントローラーがデータをビュー レイヤーに渡して処理する=>ビュー レイヤーレンダリング、コントローラーはレスポンス(レンダリングされたビュー)を返します

これをインタラクティブに行うには、AJAXを使用する必要があります (私はAJAJを提案します)。

この場合の全体的なパラダイムは、上記のフローがすべての AJAX 要求で繰り返されることです。これはさまざまな方法で実現できます。

これは、サポートする必要があるブラウザー (およびバージョン) にも大きく依存します。コントローラーまたは完全な API を介して、クライアント側に「アクセス」を提供する必要があります。API の最適なソリューションはRESTです。これがエンタープライズ アプリである場合は、Richardson Maturity Modelに従うことをお勧めします。

完全なリアルタイム アプリが必要ない場合は、jQuery AJAX または他の JS ライブラリの AJAX を使用します。問題は、回答として要求するのは全体的な説明であり、コード例を提供しない理由です. Cake には、データを返すために使用できるJSON ビューがあります。もう 1 つのオプションは、空のレイアウトと、次のような JSON エンコード データを返すビューです。

<?php echo json_encode($data);?>

お役に立てれば。何かあれば聞いてください。

于 2013-11-01T07:08:06.350 に答える