2013-06-02 32 views
3

我想我應該問這之前繼續我的腳本項目,後來意識到我可能做錯了什麼。不妨先節省一下我自己的時間,看看我所做的是否確實是正確的。使用PHP和JQuery

我對PHP和JQuery相當陌生,並且仍然掌握了這兩者。我最近遇到了一個問題,我想在使用JQuery執行某個函數後運行一些PHP代碼,因此在做了一些在線閱讀之後,我得到了創建一個PHP文件的想法,該文件只做我想做的事情併發布給它從我的JQuery函數與所需的變量。這樣我就可以在同一時間實現我的服務器端和客戶端目標。然而!

它看起來不正確。完全一樣。我發現自己至少有一個簡單頁面的十個包含文件。當表單加載時,這些文件會包含在我的HTML代碼中,並且在使用我的JQuery函數刷新某個DIV後,它們會重新加載。這樣我就可以保持我的腳本動態,我懷疑爲了保持這種方式我還可以做其他事情。但是我經常需要在執行某個JQuery函數後更新東西,因此我調用了一個類似的文件來加載,但這次是一個文件,我將一些參數傳遞給(使用POST方法,通過JQuery) ,並在文件本身中執行所需的操作。

現在,在簡要解釋我目前的情況和工作方法後,我想知道我所做的是否正確。如果你仍然想知道我在說什麼,我想詳細解釋我的意思:

假設我有我的index.php文件,它打印我的數據庫中的數據和一些額外的行以及。一旦我點擊其中一個頁面按鈕,我想根據我已經植入頁面的表單更新我的數據庫,然後重新加載包含該數據的DIV。我不想重新加載整個頁面。

現在,如果我想這樣做,沒有JQuery本來很容易。如果POST參數確實有效,我會將數據發佈到相同的表單並更新它。然而,有沒有辦法不刷新該JQuery的DIV,所以我想出了一些與此類似:

$.post("/files/dosomething.php", { taskID: _taskID }, function(){ 
    $("#div_tasks").fadeOut(800, function(){ 
     $('#div_tasks').load('/files//load_div_A.php', function(){ 
      $("#div_tasks").fadeIn(1500); 
     }); 
    }); 
}); 

這就是我在我上週​​學習PHP和JQuery的在做。現在在我進一步討論這個之前,我想知道這是否是實現我的目標的正確方法。

//例B:

我有我的HTML代碼中DIV它打印任務的表格,例如。我如何打印它?我包含一個文件,該文件在我希望顯示錶的確切點處回顯表格。然後,在每一行中,都有一個名爲'delete'的按鈕,它從數據庫中刪除選定的行。我所做的是,使用JQuery(由於我只想要刷新DIV),我調用另一個調用remove.php的外部文件,並使用POST發送要刪除的任務的索引。該文件執行服務器端代碼,一旦完成,我將更新後的表格加載到該DIV中,方法是調用我在主頁面中首先調用的文件。這次該表將被更新,因爲它將從數據庫讀取更新的數據。

這是我怎麼做到的?這是正確的方式嗎?這對我來說似乎不太合適。我從來沒有這種方式編碼,似乎有點混亂。

在此先感謝和抱歉的長屁股問題。

+0

只是爲了確保我已經得到了您的問題......您已經有一些執行操作的服務器端代碼,並且您要從不同的PHP腳本中加載一些HTML的響應數據。您始終可以從第一個腳本中返回該數據。我認爲你的問題更多的是關於如何構建你的項目,並將你的應用程序邏輯與演示分開,是的?有很多方法可以做到這一點,但如果不瞭解應用程序的更多信息,很難提出建議。 – Brad

+0

這不是一個真正的腳本問題,而是一個邏輯上的問題,你說得對,是的。我的主要問題是意識到如何讓我的東西做到最好,最正確的方式。我會試着更清楚我想要做什麼,請看我最新的問題。 –

回答

1

您描述的問題正是設計要解決的關注模式(如MVC)的分離問題。

在你的情況下,從顯示實例到顯示實例,唯一改變的是響應必須如何格式化並提供給用戶。

我強烈建議你爲你的項目尋找一些比較流行和有文檔記錄的MVC框架(或者如果沒有其他的東西只是爲了玩並從中吸取靈感,其中大多數和一些很容易遵循初學者教程你可以在一個小時左右穿過)。

在我看來,您正在以與這些方法兼容的思維方式查看問題,它可能會讓您感到笨重,主要是因爲您缺少很多這些框架提供的結構和工具。

1

如果我正確理解問題。我認爲將(使用jQuery)發佈到執行您想要執行的操作的另一個腳本並僅返回所需的結果(html/json數據)會更容易。現在你正在向服務器發出兩個請求,這些請求似乎並列在一起。

我的建議是調用一個PHP腳本來執行您想要執行的特定操作(例如對新聞項目進行更新)。然後只在您的回覆中返回該數據,然後使用jQuery將該數據的格式設置爲您想要的格式。

$.post("/files/writetodatabase.php", { taskID: _taskID }, function(data){ 
    $('#div_tasks').html(data) // this is assuming you return html, other wise you // could return JSON data and use it here 
}); 

我試圖使其儘可能清晰,難以在打字時解釋。

+0

問題是我需要在頁面加載時加載數據,而不管我是否更新它的決定。這意味着,我將不得不重複您建議我創建的那個UPDATE&LOAD文件中的一半代碼,或者保持它現在的樣子。有任何想法嗎?我可能會錯過一些東西。 –

+0

我會調用相同的單獨頁面來加載頁面加載數據。在jQuery document.ready中,只需調用相同的php腳本併爲它們中的每一個加載數據,那麼您就不會等待該數據加載頁面。另一個選擇是使用一個用於更新的請求,將請求轉發到作爲獲取頁面的頁面。因此,在頁面加載時,您使用get請求調用腳本,並從數據庫加載特定id的數據,然後當您想要更新它時,發佈到更新腳本和更新腳本,將請求轉發到get腳本並返回數據。 – AndrewK

+1

不要害怕添加多個腳本來執行單個小任務。它使你的代碼更加模塊化和可重用。 – AndrewK