1. 程式人生 > 其它 >asp.net :使用jquery 的ajax +WebService+json 實現無重新整理去後臺值

asp.net :使用jquery 的ajax +WebService+json 實現無重新整理去後臺值

首先貼上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資料,知道的給解答下……