最近一個項目中需要很多地方做無重新整理技術,那麼就用到了Jquery ajax,以前因為項目做無重新整理的要求比較少點,又加上上個公司主要是用VS2003開發,哎這個老古董是夠老啊,從 前一個公司離職,主要也是因為公司的主要架構是在2003,接觸不到新的東西,所以離開的。
因為以前自己也摸索過jquery ajax,但是還是實際項目卻用的少,開始還以為不會遇到很多問題,結果卻讓我頭疼呵呵,大大小小的問題,讓我當初有砸滑鼠的問題(砸電腦的想法卻沒有),所以現在記點東西。
問題1:開發環境是在VS2008上,但是得使用.NET 2.0,所以就遇到了問題,發現竟然ajax竟然不進背景方法。
測試代碼如下:
View Code
$(document).ready(function() { $.ajax({ type: "POST", url: "default.aspx/HelloWord", dataType: "text", contentType: "application/json; charset=utf-8", beforeSend: function(XMLHttpRequest) { $('#show').text("正在查詢"); }, success: function(msg) { alert(eval("(" + msg + ")").d); }, error: function(xhr, msg, e) { alert(msg); } }); });
View Code
[System.Web.Services.WebMethod()] public static string HelloWord() { return "Hello Word"; }
然後運行得到的卻是:看到頁面上有個JS語法錯誤,經過尋找發現web.config檔案裡面缺少一段代碼,所以我把這段代碼拷到web.config的<system.web>節點下,然後運行成功。
<httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </httpModules>
問題2:後台返回的是JSON格式的資料,JS接收資料存為JSON資料對象。
因為我後台取得的資料時IList<T>格式的,所以需要轉換為JSON格式類型的,所以使用了網上搜到的一個方法。
View Code
public static string ObjectToJson<T>(string jsonName, IList<T> IL) { StringBuilder Json = new StringBuilder(); Json.Append("["); if (IL.Count > 0) { for (int i = 0; i < IL.Count; i++) { T obj = Activator.CreateInstance<T>(); Type type = obj.GetType(); PropertyInfo[] pis = type.GetProperties(); Json.Append("{"); for (int j = 0; j < pis.Length; j++) { Json.Append("\"" + pis[j].Name.ToString() + "\":\"" + pis[j].GetValue(IL[i], null) + "\""); if (j < pis.Length - 1) { Json.Append(","); } } Json.Append("}"); if (i < IL.Count - 1) { Json.Append(","); } } } Json.Append("]"); return Json.ToString(); }
前台JS代碼如下:
View Code
$(document).ready(function() { $.ajax({ type: "POST", url: "programList.aspx/getClassData", dataType: "json", contentType: "application/json; charset=utf-8", success: function(msg) { alert(eval("(" + msg + ")").d); }, error: function(xhr, msg, e) { alert(msg); } }); // 初始化資料(顯示第一頁) onloadGrid(0); InitData(0, 0); });
運行又得到錯誤:JS錯誤缺少']',然後我用FireBug工具查看是否取到JSON值,查看得到,資料已經有響應,並且符合JSON格式而並沒有缺少']', 所以我又將JS裡面的dataType:text,運行後彈出資料成功。這裡我真的很納悶,不知道是我背景轉換方法不對,還是前台JS的不對,這裡發一疑問,麻煩看過的,知道的說聲,這裡先謝謝啦。
問題3:前面得到JSON格式的資料,綁定到Ztree上,發生錯誤,然後我在頁面上自己var一個對象,賦值這段值(從Fire Bug 中拷貝出來),綁定成功。
仔細的查看Ztree的API,發現繫結資料源必須是JSON對象,而我前面得到的卻是JSON格式的字串,所以這裡我們必須把得到的資料轉換為JSON對象。
代碼如下:
View Code
success: function(msg) { treeData = jQuery.parseJSON(msg); var json = eval('(' + treeData.d + ')'); zTreeObj = $.fn.zTree.init($("#treeDemo"), setting, json); }
這下徹底成功啦。
折騰啊,網上有些代碼到處都是錯,這真讓人鬱悶,所以我把我所遇到的一些問題,記下來。
這裡也推薦下ajax的調試工具:FireBug以及jquery樹外掛程式Ztree。