傳統上,我們一直在響應中使用xml,該響應由Javascript方法分析以執行後處理。我想出了一個新的,更簡單的實現,它使用由requestAttribute設置的隱藏輸入並在ajax回調中執行。關於在Java應用程序中執行JavaScript後處理的問題
JSP:
<%
String jsPostProcess = (String)request.getAttribute("jsPostProcess");
if (jsPostProcess!=null && jsPostProcess.trim().length()>0){
%>
<input type="hidden" id="jsPostProcess" name="jsPostProcess"
value="<%= jsPostProcess %> "/>
<% } %>
Ajax回調:
var callback = {
success: function(response) {
var div = $(divId);
if (div){
div.innerHTML = response.responseText;
}
var jsPostProcess = $('jsPostProcess');
if (jsPostProcess)
eval(jsPostProcess.value);
},
failure: function(response) {
alert('Something went wrong!');
}
}
servlet代碼:
request.setAttribute("jsPostProcess", jsPostProcess);
它精美的作品,它是如此簡單得多添加JS後期處理幾乎任何呼叫,無論功能多麼簡單或複雜。不需要定製的js方法來解析。
好奇的是,如果任何人都可以識別它的任何潛在問題(如安全問題?)或爲其他選擇提出任何建議。我們目前在前端使用Prototype和YUI 2。
感謝您的回覆!一旦我重新閱讀你的文章幾次,我就完成了所有的工作(儘管我之前的評論我編輯哈哈!!)。優秀的建議。非常感激! – skel625 2010-09-13 17:09:16
「就像這樣的值調用eval()似乎有點危險,雖然也許你很清楚它會發生什麼。」我認爲同樣的事情,但我想不出任何可以被惡意利用的方式,因爲後處理都是非常標準的事件,不允許比用戶通常可能的更多的「黑客能力」 。但我不是js安全問題的專家! ;) – skel625 2010-09-13 17:19:08
好吧,只要這些東西沒有任何用戶提供的內容,你沒問題。如果是這樣,那麼也有一些方法可以保護你自己。 – Pointy 2010-09-13 18:55:59