2011-10-18 22 views
0

爲了簡化調試,我在我的PHP代碼中引入了一個錯誤處理程序,它收集所有錯誤,警告等,並記錄數據庫查詢並在頁面末尾顯示它們管理員登錄到該站點。使用php捕獲ajax腳本中的錯誤

我想爲ajax查詢做類似的事情。更一般地說,我想將兩個錯誤面板集成在一起,但是我很遺憾有一個很好的方法來做到這一點。

我想要的是一個彈出面板,其中包含頁面上的錯誤,包括異步腳本中的錯誤。

我已經有了一種製作彈出式面板的方法,並用ajax請求中的數據填充它們。

我想過在錯誤窗口中使用彗星模式並使用php註冊一個退出處理程序,它發送一個http請求,以某種方式將錯誤傳遞給窗口,但我不太確定如何去做這件事,如何將它全部綁定到php會話中(以便用戶看不到其他錯誤)

任何想法如何解決這個問題?有沒有簡單的東西可以忽略?

+0

Firephp? 151515 –

+0

@HalilÖzgür可能是可行的,但它可以在沒有安裝螢火蟲的許多計算機上管理。我承認我是這樣做的,我必須解決它,但如果用戶遇到問題,我需要他們提供的錯誤信息,我不能要求他們安裝螢火蟲。 –

回答

0

好吧,我終於實現了,它似乎工作得很好是:

我寫一個PHP函數,收集了網頁上的所有錯誤,並帶有class =「關於SystemError」輸出一個特殊格式的DIV 。它包含一個包含文件名稱的標題和一個包含錯誤列表的div。可以說這個函數被稱爲「xx_error_get($ filename)」

然後我有每個ajax腳本返回這個字符串作爲其結果的一部分。我所做的只是添加一個呼叫

echo xx_error_get(__FILE__); 

在返回的XML對象的末尾。

回到我的主要頁面的PHP,我添加了一個隱藏的div來我的身體使用id =「systemTemp」

然後我添加了幾行到$(文件)。就緒處理程序的jQuery:

$(document).ajaxSuccess(function(e, xhr, settings) { 
        $("#systemTemp").html(xhr.responseText); 
        $("#systemError").prepend($("#systemTemp").children(".systemError").html()); 
        $(".systemError").remove(); 
        $("#systemTemp").empty(); 
        $("#systemError").accordion("destroy"); 
        $("#systemError").accordion({autoHeight:false});    
    }); 

不完全是最乾淨的代碼,但我希望這對任何人都有幫助。

+0

我應該補充說:ajax調用最終需要清理。現在腳本輸出原始html或有時沒有。我打算改變它,以便它總是返回一個JSON對象。然後,ajaxSuccess處理程序將只讀取返回的JSON對象的錯誤部分並將其添加到手風琴中。沒有更多的臨時div和沒有更多的選擇器。腳本儘管解決了主要問題。 –