作B/S項目的時候,咱們通常使用jquery+ashx來實現異步的一些操做,好比後臺獲取一些數據到前臺,可是若是ashx文件不在本項目下,引用的是別的域下的文件,這時候就訪問不了。關於jsonp實際上是老生常談的話題,園中也有很多文章介紹,能夠把jsonp當作一個協議或模式,這邊就很少說,咱們只看示例。javascript
咱們先看下代碼:html
1 public void ProcessRequest(HttpContext context) 2 { 3 string type = context.Request.QueryString["type"].ToString(); 4 string result = ""; 5 switch (type) 6 { 7 case "1": 8 result = "one"; 9 break; 10 case "2": 11 result = "two"; 12 break; 13 case "3": 14 result = "three"; 15 break; 16 default: 17 result = "other"; 18 break; 19 } 20 context.Response.ContentType = "text/plain"; 21 context.Response.Write(result); 22 }
前臺js代碼:java
<script type="text/javascript"> function getString() { $.ajax({ type: "POST", url: "GetStringDemo.ashx?type=" + $("#txtValue").val(), timeout: 20000, beforeSend: function (XMLHttpRequest) { $("#div_clear").html("正在獲取,請稍候..."); }, success: function (data, textStatus) { $("#div_clear").html("獲取值:" + data); }, error: function (XMLHttpRequest, textStatus, errorThrown) { $("#div_clear").html("獲取出錯!"); } }); } </script>
上面的代碼不須要解釋太多,就是前臺經過ajax傳過去參數,ashx進行處理並返回處理結果,前臺呈現,這是咱們通常正常經過ashx作的異步操做,注意如今是先後臺在同一個項目下。jquery
運行結果:ajax
上面的示例ajax代碼中url若是改爲別的域名下的ashx文件,就會出現訪問錯誤,經過jsonp能夠解決跨域問題,上面的代碼咱們修改下:json
ashx代碼:跨域
1 public void ProcessRequest(HttpContext context) 2 { 3 string type = context.Request.QueryString["type"].ToString(); 4 string callback = HttpContext.Current.Request["jsoncallback"]; 5 string result = ""; 6 switch (type) 7 { 8 case "1": 9 result = "one"; 10 break; 11 case "2": 12 result = "two"; 13 break; 14 case "3": 15 result = "three"; 16 break; 17 default: 18 result = "other"; 19 break; 20 } 21 context.Response.ContentType = "application/json"; 22 context.Response.ContentEncoding = System.Text.Encoding.UTF8; 23 context.Response.Write(callback + "({\"result\":\"" + result + "\"})"); 24 context.Response.End(); 25 }
前臺js代碼:app
1 <script type="text/javascript"> 2 function getString() { 3 $.ajax({ 4 url: "http://localhost:8975/GetStringDemo.ashx?jsoncallback=?", 5 dataType: "jsonp", 6 data: { "type": $("#txtValue").val() }, 7 beforeSend: function (XMLHttpRequest) { 8 $("#div_clear").html("正在獲取,請稍候..."); 9 }, 10 success: function (data, textStatus) { 11 $("#div_clear").html("獲取值:" + data.result); 12 }, 13 error: function (XMLHttpRequest, textStatus, errorThrown) { 14 $("#div_clear").html("獲取出錯!"); 15 } 16 }); 17 } 18 </script>
注意上面的url,ashx和前臺頁面並非在一個項目下。異步
運行結果:jsonp
示例代碼下載:jsonp跨域+ashx.rar