2011-04-09 24 views
0

說,如果在服務器上的Ajax調用,而不是正常的成功內容返回一個500頁,我想加載加載,如果它是一個非Ajax調用錯誤頁面。AJAX轉換爲非AJAX調用上的錯誤

我不想重定向或重裝,因爲Werkzeug提供了一個我想使用的優秀調試器,但是由於調試頁面發送到Ajax處理程序,我不知道如何加載該頁面。我不能重定向到一個通用頁面,因爲那樣錯誤數據就不會出現了,我不想再打第二個電話,因爲他們是可能已經修改狀態的POST,所以第二個電話可能不會返回相同的電話號碼堆棧跟蹤/錯誤作爲第一個調用。

我已經得到最接近的是:

$("body").ajaxError(function(e, jqxhr, settings, exception) { 
    $('html').html(jqxhr.responseText); 
}); 

幾乎工作,但沒有加載頁面的JavaScript。

+0

會用的'iframe'是可以接受的? – 2011-04-09 15:23:21

+0

@ no.good當然,我還沒有真正與iframe合作,因爲他們似乎被折磨,但因爲這只是爲了調試,我不在乎。你可以填充一個iframe頁面內容存儲在一個JavaScript變量,並加載它,如果它是一個正常的頁面加載? (即在所有的document.ready的Javascript被調用等) – Davy8 2011-04-09 15:29:18

+0

我張貼的答案,顯示這方面的工作,使用'document.write()的'與小提琴http://jsfiddle.net/tuEdw/測試的iframe – 2011-04-09 16:28:58

回答

1

Here's my solution using an iFrame - 我加載了相同的頁面(成功但是您也可以在錯誤中執行),並且在加載時,頁面將顯示警報並記錄到控制檯以顯示響應中的腳本HTML工作。我已經使用FF4和Chrome測試過了。

這是核心功能(信用:http://www.tek-tips.com/viewthread.cfm?qid=1021687

function loadFrame(frameId, text){ 
    var ifrm = document.getElementById(frameId); 
    ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument; 
    ifrm.document.open(); 
    ifrm.document.write(text); 
    ifrm.document.close(); 
} 
  • 缺點我能想到的在使用這種方法的是,如果響應HTML有幀無效化代碼,或者如果它取決於由於某種原因,這個值可能會失敗。

  • OTOH,在使用超過使用.html()方法做它的I幀通過herostwist的建議做的好處是,.html()使用瀏覽器的原生innerHTML財產等行爲變成特定瀏覽器;瀏覽器可能會剝離scripthead這可能不會幫助您進行調試。此外,如果在調用頁面和響應頁面上有相同ID的元素,您可能會發現事件處理程序不會附加到響應頁面的元素。但是如果這些情況不適用於你的情況,這應該也足夠好。

+0

完美,謝謝! – Davy8 2011-04-09 18:16:53

0

據jQuery的AJAX文件,如果你設置的數據類型爲html「返回HTML作爲純文本;在DOM插入時包含的腳本標籤進行評估。」所以你的方法應該工作,如果你強制數據類型爲HTML。

+0

作品。 – herostwist 2011-04-09 16:24:43

+0

似乎沒有在jsfiddle工作給我。如果它工作,我希望看到結果中的404頁面的內容,我只看到「開始」div出現和消失。 – Davy8 2011-04-09 18:01:32