jsonp跨域+ashx(示例)

前言

  作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

jsonp跨域

  上面的示例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

相關文章
相關標籤/搜索