使用 PHP、jQuery 和 Ajax 进行交互式文件处理


Interactive file processing in using PHP, jQuery and Ajax

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

使用了算法,它工作正常,我用普通的PHP编程。

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

我的问题是:

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

jQuery-ajax可以提供帮助吗?

你觉得怎么样?

问候

更新

正如鲍里斯拉夫·萨贝夫(Borislav Sabev)指出的那样,我这样做:

使用以下方法创建文件上传:jQuery 表单插件

根据上传文件的数据结构解析的 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>');
}
});

@AD7six告诉你的完全正确,但你的问题非常模糊。

您似乎需要的是为用户提供一种交互式(实时?)方式,以便在上传和处理文件后编辑数据。如果是"按行排列的数据",我可以建议一些 DataGrid - 将其想象为文件结构的 Web 表示。

你想说的是"视图显示控制器上的方法或操作的结果",这种情况是在正常的HTTP(使用MVC)流中:

浏览器(用户)发起请求 => 请求已处理 我的控制器 => 调用模型(获取、保存或操作数据)=> 数据返回到控制器 => 控制器将数据处理到视图层 => 视图层渲染,控制器返回响应(渲染视图)

为了以交互方式执行此操作,您必须使用AJAX(我建议使用AJAJ)。

在这种情况下,总体范例是在每个 AJAX 请求上迭代上述流。您可以通过多种方式实现此目的:

  • 使用纯JavaScript和XMLHttpRequest
  • 使用jQuery的XMLHttpRequest包装函数($.ajax()$.post()$.get()$.load()等)
  • 其他一些JS库的AJAX功能(例如MooTools)
  • 使用实时 JS 应用框架

这也在很大程度上取决于您需要支持的浏览器(和版本)。您需要通过控制器或完整 API 为客户端提供"访问权限"。API 的最佳解决方案是 REST。如果这是一个企业应用程序,我建议您遵循理查森成熟度模型。

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

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

希望这有帮助。如果有的话。