2013-10-31 100 views
0

我正在將一箇舊的MS-DOS Foxpro程序遷移到cakePHP,但在應用程序的某些部分,用戶將有可能加載一個文本文件並根據它進行處理到一些商業邏輯。使用PHP,jQuery和Ajax進行交互式文件處理

我工作的算法,它工作正常,我用純PHP編程。

但是在這個過程的某些部分中,用戶必須交互執行一些任務,在普通的PHP中可以這樣做。

我的問題是:

如何,我可以有一個互動的過程文件上的MVC框架,因爲控制器已經處理過的數據時,它`給控制的看法?

jQuery-ajax可以提供幫助嗎?

您認爲如何?

問候

更新

由於鮑里斯拉夫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等待用戶輸入一個然後繼續處理?

BTW:這是我使用$ .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>'); 
} 
}); 
+1

「在普通的PHP中可以做到這一點」然後,可以使用任何php框架,但是您要求的內容不夠清晰,無法進一步評論。 – AD7six

+0

要處理的文件有一個很長的cad數據列表,按行排列,我像CSV一樣操作文件。 處理文件時,該算法會執行從cad術語到內部記法系統的轉換,但有時cad文件包含不在轉換表上的定義,然後要求用戶手動選擇適當的值。 我在控制器上編程了算法,但我不知道如何通過視圖干擾用戶,因爲視圖顯示了控制器上的方法或操作的結果。 – DariusVE

回答

1

什麼@ AD7six告訴你的是完全正確但你的問題很模糊。

您似乎需要的是爲用戶提供了一種交互式(實時?)方式,以便在文件上傳和處理後編輯數據?。如果它是'按行排列的數據',我可以建議一些DataGrid - 將其想象爲您的文件結構的Web表示。

什麼你試圖用說「的視圖顯示控制器上的方法或行爲的結果」是,這種情況是正常的HTTP(與MVC)流量:

瀏覽器(用戶)發起請求=>請求被處理我的控制器=>模型被稱爲(獲取,保存或操縱的數據)=>數據被返回到控制器=>控制器到View層處理數據=>視圖層呈現,Controller返回Response(呈現視圖)

爲了做到這一點互動,你將不得不使用AJAX(我建議AJAJ)。

這種情況下的整體範例是,上面的流程在每個AJAX請求上迭代。您可以通過多種方式實現這一目標:

  • 使用純JavaScript和XMLHttpRequest
  • 使用jQuery的XMLHttpRequest的包裝函數($.ajax()$.post()$.get()$.load()等)
  • 其他一些JS LIB的AJAX功能(MooTools例如)
  • 使用實時JS app framework

這也很大程度上取決於您需要支持的瀏覽器(和版本)。 您需要通過控制器或完整的API爲客戶端提供'訪問'。 API的最佳解決方案是REST。如果這是一個企業應用程序,我建議你堅持Richardson Maturity Model

如果你不需要一個完全實時的應用程序,我會使用jQuery AJAX或其他JS庫的AJAX。 問題是,你所要求的答案是一個整體的解釋,這就是爲什麼我不會提供代碼示例。 蛋糕有JSON views,你可以用它來返回數據。 另一個選項是一個空的佈局和返回類似JSON編碼數據的圖:

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

希望這有助於。如果有任何問題。

+1

感謝@ borislav-sabev,這就是我想要的,我知道如何在CakePHP上實現JSON,實際上我有一些使用AJAX部分的進程,大多數是jQuery的Autocomplete。 我會做一些測試併發布我的解決方案。 – DariusVE