0

我正在将一个旧的 MS-DOS Foxpro 程序迁移到 cakePHP,但在应用程序过程的某些部分中,用户将有可能加载一个文本文件并根据一些业务逻辑对其进行处理。

我使用了算法,它运行良好,我用普通的 PHP 对其进行了编程。

但是在流程的某些部分,用户必须交互执行某些任务,在纯 PHP 中可以做到这一点。

我的问题是:

我如何在 MVC 框架上进行交互式文件处理,因为控制器在将控制权交给视图时已经处理了数据。?

jQuery-ajax 能帮上忙吗?

你怎么看?

问候

更新

正如 Borislav Sabev 指出的那样,我这样做:

使用以下方法创建文件上传:jQuery Form Plugin

根据上传文件的数据结构解析的 PHP 文件,以 JSON 格式向客户端返回文件的解析内容。

然后通过 ajax POST 发送 JSON 数据进行处理

$.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 成熟度模型

如果您不需要完全实时的应用程序,我会使用 jQuery AJAX 或其他一些 JS lib 的 AJAX。问题是您要求的答案是一个全面的解释,这就是我不提供代码示例的原因。Cake 具有可用于返回数据的JSON 视图。另一个选项是一个空布局和一个返回 JSON 编码数据的视图,例如:

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

希望这可以帮助。如果有什么要求。

于 2013-11-01T07:08:06.350 回答