>我正在将旧的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);?>
希望这有帮助。如果有的话。