我們的網站一開始都是由前臺提交表單到action,每次一個小操作整個頁面都會刷新,影響用戶體驗,這次由我實現部分功能的局部刷新,但是初學ajax遇到不少問題
1、我們在struts.xml外擴展了一個xml來寫json類型傳值的action配置,我改完後直接新寫了一個:
<action name="addAccount2" class="random1.action.addAccount2"> <result name="showAccount" type="json"> <param name="root">list</param> </result> </action>
但是忘了刪掉原來的導致出錯:
<!-- <action name="addAccount2" class="random1.action.addAccount2"> <result name="nextaction" type="chain" > account </result> <result name="failure" type="freemaker"> /error.jsp </result> </action> -->
2、json傳送數據後全變爲小寫
我在action裏把取到的數據(list)轉換成JSON,success函數裏循環讀取json的數據,但是在把新的內容append到相應的塊裏的時候,list裏的對象屬性首字母都是大寫的,append的時候我自然寫成大寫,然而發現取到的都是undefined。查閱資料後,發現別人都是改成小寫的,我改爲小寫的之後就正確了。
3、局部刷新後,相應塊的js失效
本來有個下拉的js,局部刷新後居然失效了,
$(document).ready(function(){ $("ul.expmenu li > div.header").click(function() { var arrow = $(this).find("span.arrow"); alert("arrow"); if(arrow.hasClass("up")) { arrow.removeClass("up"); arrow.addClass("down"); } else if(arrow.hasClass("down")) { arrow.removeClass("down"); arrow.addClass("up"); } $(this).parent().find("ul.menu").slideToggle(); }); });
解決無果後,只好把該效果放到了onclick事件裏:
<script> function showcontent(id){ //alert(id); var str="list"+id; /* $("div").children(".list").hide(); $("#"+str).show(3000); */ var arrow = $("#"+id).find("span.arrow"); if(arrow.hasClass("up")) { arrow.removeClass("up"); arrow.addClass("down"); $("#"+str).hide(); } else if(arrow.hasClass("down")) { arrow.removeClass("down"); arrow.addClass("up"); $("#"+str).show(3000); } $("#"+id).find("ul.menu").slideToggle(); } </script>