jquery.ajax請求aspx和ashx的異同 Jquery Ajax調用aspx頁面方法

來源:互聯網
上載者:User

標籤:參數詳解   www   hello   let   news   send   命名空間   post方法   .com   

1.jquery.ajax請求aspx

請求aspx的靜態方法要注意一下問題:

  (1)aspx的後台方法必須靜態,而且添加webmethod特性

  (2)在ajax方法中contentType必須是“application/json”,

  (3)data傳遞的資料必須是嚴格的json資料,如"{‘a‘:‘aa‘,‘b‘:‘bb‘}",而且參數必須和靜態方法的參數一 一對應

  (4)aspx的後台方法返回的資料預設形式是“{‘d‘:‘返回的內容‘}”,所以如果dataType指定為"json"必須通過data.d來擷取返回資料

在webfrom頁面中後台定義要求方法(方法必須靜態,而且必須添加WebMethod特性)

[WebMethod]public static string GetString(string str_a,string str_b){    return str_a+str_b;}

前台頁面請求

$(function(){$.jax({      url:‘default.aspx/GetString‘,      type:‘post‘,      contentType:‘application/json‘,//這裡必須指明要傳遞到伺服器的內容的編碼方式,而且必須是json,否則後台方法擷取不到傳遞資料。      dataType:‘json‘,//用戶端以json的方式去讀取返回資料      data:‘{‘str_a‘:‘aaa‘,‘str_b‘:‘bbbb‘}‘,//參數必須和背景參數名稱一樣 data必須傳遞json格式的資料      success:function(result){              alert(result.d);//因為webmethod的方法預設返回的資料格式是json的格式而且資料格式如:"{‘d‘:‘返回的資料‘}",所以要通過.d來擷取返回的內容。                              }     });});

2.請求ashx

 注意問題:

(1)ajax方法中的contentType如果指定必須指定為“application/x-www-form-urlencoded”,否則在ashx中request.form擷取不到資料

(2)如果dataType為json,想要jQuery自動解析json資料,ashx必須返回嚴格的json資料,而且必須是雙引號(用反義字元去反義)的格式,如: context.Response.Write("{\"d\":\"Hello World\"}"),否則jquery會解析json失敗。

(3)如果因為contentType未設定或者不是“application/x-www-urlencoded”類型,reque.form擷取不到資料,可以通過context.Request.InputStream來擷取請求內容。

(4)在請求ashx中data參數有這幾種形式: data:{‘a‘:‘aa‘,‘b‘:‘bb‘}, data:"a=aa&b=bb",data:{a:‘aa‘,b:‘bb‘},這三種資料都可以通過request.form[""]來擷取到。

 

 

Jquery Ajax調用aspx頁面方法

 

在asp.net webform開發中,用jQuery ajax傳值一般有幾種玩法

1)普通玩法:通過一般處理常式ashx進行處理;

2)進階玩法:通過aspx.cs中的靜態方法+WebMethod進行處理;

3)文藝玩法:通過WCF進行處理。

第一種和第三種方法不在本文介紹範圍之內,下面重點介紹第二種方法。

說明

在我們的印象裡 asp.net的Web服務是以.asmx來結尾的,而我們現在的asp.net也能實現Web服務,這是因為預設Web.config中已經添加了System.Web.Handlers.ScriptModule,它是用於管理asp.net中ajax功能的HTTP模組,這樣不管使用者是請求.asmx檔案還是.aspx檔案,都會通過此處理常式來處理請求。

後台代碼:
using System.Web.Services; //引入命名空間[WebMethod]public static string SayHello(){    return "Hello Ajax!";}
前台頁面代碼:
<button id="btn">提交</button>
Javascript代碼:
$(function() {         $("#btn").click(function() {             $.ajax({                          type: "post", //要用post方式                             url: "/Demo.aspx/SayHello",//方法所在頁面和方法名            contentType: "application/json; charset=utf-8",                 dataType: "json",                 success: function(data) {                                    alert(data.d);//返回的資料用data.d擷取內容            },            error: function(err) {                     alert(err);                 }             });    });     });

 

效果:

需要注意的地方

一、data參數寫法

//1)普通寫法,JSON索引值對,如:單個參數的data:"{newsID:"+ id +"}",//多個參數的形式:data:"{newsID:"+ newsID +",name:"+ name +"}",//2)文藝寫法:各種引號,雙引號,單引號拼接,如//單個參數寫法:data:"{‘name‘:‘"+ name +"‘}",//多個參數寫法:data: "{‘content‘:‘" + $("#content").val() + "‘,‘createTime‘:‘" + $("#createTime").val() + "‘,‘creator‘:‘" + $("#creator").val() + "‘}"//容易出錯!!!!!

二、用QueryString傳值是後台取不到的問題

在WebMethod()方法中,是不能通過 HttpContext.Current.QueryString.Get("id")來擷取query string,因為在WebMethod()預設是用POST方法提交的,而用GetQueryString是不能取到值的。替代方法是用JS擷取url中的參數,用ajax提交給後台方法是用:   <script src="/js/jquery-1.11.3.js"></script>
< script type = "text/javascript" >    function getArgs(strParame) {        var args = new Object();        var query = location.search.substring(1); // Get query string        var pairs = query.split("&"); // Break at ampersand        for (var i = 0; i < pairs.length; i++) {            var pos = pairs[i].indexOf(‘=‘); // Look for "name=value"            if (pos == -1) continue; // If not found, skip            var argname = pairs[i].substring(0, pos); // Extract the name            var value = pairs[i].substring(pos + 1); // Extract the value            value = decodeURIComponent(value); // Decode it, if needed            args[argname] = value; // Store as a property        }        return args[strParame]; // Return the object} < /script>

三、時間問題

WCF 或 類比Web服務處理JSON時返回時間格式問題。解決方案如下:// 雜亂的時間var rawDate = "/Date(1347120000000+0800)/";// 提取時間字串var strDate = rawDate.substr(6, 13);// 把時間字串轉化成int類型var intDate = parseInt(strDate);// 構造一個Date對象var newDate = new Date(intDate);// 將時間轉化成當地時間格式var myDate = newDate.toLocaleDateString();// 最終結果alert(myDate);// 合并成一句var resultDate = new Date(parseInt("/Date(1347120000000+0800)/".substr(6, 13))).toLocaleDateString();

四、$.ajax參數詳解

//標準的寫法:$.ajax({     type: "post",     dataType: "json",     contentType: "application/json", //注意:WebMethod()必須加這項,否則用戶端資料不會傳到服務端     data:{如上所述},//注意:data參數可以是string個int類型     url: "List.aspx/DeleteNews",//類比web服務,提交到方法     // 可選的 async:false,阻塞的非同步就是同步     beforeSend:function(){          // do something.          // 一般是禁用按鈕等防止使用者重複提交          $("#btnClick").attr({disabled:"disabled"});          // 或者是顯示loading圖片     },     success: function (data) {          alert("success: " + data.d);//注意這裡:必須通過data.d才能擷取到伺服器返回的值          // 服務端可以直接返回Model,也可以返回序列化之後的字串,如果需要還原序列化:string json = JSON.parse(data.d);          // 有時候需要嵌套調用ajax請求,也是可以的     },     complete: function(){          //do something.          $("#btnClick").removeAttr("disabled");          // 隱藏loading圖片     },     error: function (data) {          alert("error: " + data.d);     }});
   

jquery.ajax請求aspx和ashx的異同 Jquery Ajax調用aspx頁面方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.