【问题标题】:Interactive file processing in using PHP, jQuery and Ajax使用 PHP、jQuery 和 Ajax 进行交互式文件处理
【发布时间】:2013-10-31 12:12:54
【问题描述】:

我正在将一个旧的 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>');
}
});

【问题讨论】:

  • “在普通的 PHP 中可以做到”然后任何 php 框架都可以,但是您的要求还不够清楚,无法进一步评论。
  • 要处理的文件有一长串 cad 数据,按行排列,我将文件作为 CSV 文件处理。在处理文件时,算法会从 cad 术语转换为内部符号系统,但有时 cad 文件包含的定义不在转换表中,然后要求用户手动选择适当的值。我在控制器上编写了算法,但我不知道如何通过视图与用户交互,因为视图显示了控制器上的方法或操作的结果。

标签: php jquery ajax file-processing


【解决方案1】:

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

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

您试图通过“视图显示控制器上的方法或操作的结果”来说明这种情况是在正常的 HTTP(使用 MVC)流程中:

浏览器(用户)发起请求=>请求被处理我的控制器=>模型被调用(获取、保存或操作数据)=> 数据返回给Controller => Controller 处理数据交给View 层=> 视图层渲染,Controller 返回Response(渲染后的视图)

为了交互地做这件事,你必须使用AJAX(我建议AJAJ)。

本例中的总体范例是上述流程在每个 AJAX 请求上进行迭代。您可以通过多种方式实现这一目标:

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

这也很大程度上取决于您需要支持的浏览器(和版本)。 您将需要通过控制器或完整的 API 为客户端提供“访问权限”。 API 的最佳解决方案是REST。如果这是一个企业应用程序,我建议你坚持Richardson Maturity Model

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

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

希望这会有所帮助。如果有什么要求。

【讨论】:

  • 感谢@borislav-sabev,这就是我想要的,我知道如何在 CakePHP 上实现 JSON,实际上我有一些使用 AJAX 部分的进程,主要是 jQuery 的自动完成。我会做一些测试并发布我的解决方案。
猜你喜欢
  • 1970-01-01
  • 2012-05-27
  • 2017-09-19
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2012-06-11
  • 1970-01-01
相关资源
最近更新 更多