2013-12-10 78 views
2

我有一個返回som html的函數。如何在ajax和非ajax中使用相同的php函數

我喜歡這個函數用作模板函數和ajax。

我已經瞭解到你應該總是使用die();在返回html的ajax函數的末尾。這將打破包含該函數作爲模板的腳本,儘管可以在ajax調用中正常工作,因爲它只加載頁面的一部分,並且其後的所有內容都已加載。

如果我不使用die(),兩者都可以正常工作,但是ajax會向頁面返回一個額外的「0」。我不確定是否有其他原因,爲什麼這是錯誤的方法。

所以我的問題是什麼是在模板中重用ajax函數的最佳方式。我想這樣做,所以我不必寫兩次整個html輸出。會煩人維護。

謝謝:)

+0

也許在請求中使用某個標誌作爲「ajax = true」? –

+0

非常感謝。那是我需要通過google找到我的答案的關鍵字。 –

回答

1

第一關 - 它很高興地看到,你關心你的軟件設計,它會definetely節省一些頭痛。我無法準確地說出爲什麼使用die()作爲AJAX函數應該是一件好事,因爲這會抑制任何進一步的輸出。你應該做的是對演示文稿和邏輯進行更嚴格的分離,但這是你應該對自己進行有效研究的內容。

對於你目前的情況(看起來好像你正在建立一個網站導航或類似的東西),這將是最好的所有請求返回相同的事情( - >離開die()),你只是在JavaScript中刪除不需要的東西,這將允許您構建一個優雅的AJAX站點(沒有JavaScript的用戶仍然可以使用該站點)

如果上述情況不是這樣,那麼您可以 - 更多通用的解決方案 - 包括像這樣:

function is_xhr_request() 
    { 
     return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest'; 
    } 

和這樣的檢查:

if(is_xhr_request()){die();} 

是一個很好的解決方法,假設頭部設置正確(它應該在大多數情況下)。

功能從Toro Framework

+0

謝謝..正是我需要的。當我可以的時候除了這個答案以外但我也會發布我的確切解決方案 - 雖然它的邏輯相同,但據我所知。 –

+0

太棒了,總是樂於幫助:) –

0

洙採取了一切我所要做的就是在寫我的功能條件檢查:

//Detect if function was called with ajax. 
    if (strcasecmp('XMLHttpRequest', $_SERVER['HTTP_X_REQUESTED_WITH']) === 0) 
    { 
     //Always die when returning output with ajax. 
     die(); 
    } 

這做到了。但我認爲ajax調用可能必須使用jquery或其他ajax框架調用才能實現 - 不確定: