asp.net :使用jquery 的ajax +WebService+json 實現無重新整理去後臺值
阿新 • • 發佈:2022-05-02
首先貼上Jquery的ajax:
$.ajax({ url: 'ws_Ajax.asmx/BindDictByUpper', type: 'POST', contentType: 'application/json;charset=utf-8', dataType: 'json', data: '{ PpareId:"' + varlue + '"}', success: function (data) { var dataObj = eval("(" + data + ")"); // $('#myList').html(''); // for (var i = 0; i < msg.d.length; i++) { // $('#myList').append('<li>' + msg.d[i] + '</li>'); // } alert(dataObj); $.each({ name: "John", lang: "JS" }, function (i, n) { alert("Name: " + i + ", Value: " + n); }); $.each(dataObj, function (idx, item) { if (idx == 0) { return true; //同countinue,返回false同break } alert("name:" + item['name'] + ",value:" + item['value']); }); }, //data: '{query:"' + $('#editQuery').val() + '"}', processData: false });
好,前臺寫好,建一個webservice頁,寫上方法:
/// <summary> /// Datatable轉換為Json /// </summary> /// <param name="table">Datatable物件</param> /// <returns>Json字串</returns> //然後在webservice中需要返回json資料的方法加上如下屬性 [ScriptMethod(ResponseFormat=ResponseFormat.Json)] public static string ToJson(DataTable Adt) { StringBuilder jsonString = new StringBuilder(); jsonString.Append("["); foreach (DataRow pdr in Adt.Rows) { jsonString.Append("{"); jsonString.AppendFormat("name:"{0}",value:"{1}"", pdr["字典內容"].ToString(), pdr["序號"].ToString()); jsonString.Append("},"); // jsonString.AppendFormat("{name:'{0}',value:'{1}'},", pdr["字典內容"].ToString(), pdr["序號"].ToString()); } jsonString.Remove(jsonString.Length - 1, 1); jsonString.Append("]"); return jsonString.ToString(); }
ScriptMethod在 using System.Web.Script.Services 名稱空間下,這裡還可以設定是否使用 get方式來呼叫 UseHttpGet=true
然後嘗試著執行,這是出問題列,無論怎樣執行都不能調到後臺方法:
最後在網上查列好久
才發現在新建的webservice頁少了一句關鍵的話:
// 若要允許使用 ASP.NET AJAX 從指令碼中呼叫此 Web 服務,請取消對下行的註釋。
在類前面加上這句話就可以了
加上以後再執行,好,可以調到後臺了
後臺的資料也傳送到前臺
但又出現問題列,發過來的資料不能以解析出來json資料
按網上說的,只要把ajax中的dataType設定為json就行了,但是實際上不行,然後在網上查了下:
1、對於伺服器返回的JSON字串,如果jquery非同步請求沒做型別說明,或者以字串方式接受,那麼需要做一次物件化處理,方式不是太麻煩,就是將該字串放於eval()中執行一次
2.對於伺服器返回的JSON字串,如果jquery非同步請求將type(一般為這個配置屬性)設為“json”,或者利用$.getJSON()方法獲得伺服器返回,那麼就不需要eval()方法了,因為這時候得到的結果已經是json物件了,只需直接呼叫該物件即可,這裡以$.getJSON方法為例說明資料處理方法
但是我把他的dataType設定為json,應該直接可以用le?
於是我把傳回來的資料放在eval()方法裡面處理了下,再呼叫就可以le?
這樣前臺調出來的資料就可以直接按你需要的方式處理了。
我這裡還又一個疑問:
我用這種方式取數為什麼查不出來資料(我對json不是很熟,第一次用):
$.each(data.root,function(idx,item){
if(idx==0){
return true;//同countinue,返回false同break
}
alert("name:"+item.name+",value:"+item.value);
});
});
網上看的這樣方式頁可以呼叫json資料,知道的給解答下……