菜鳥的 asp.net jsonp簡單應用


簡單介紹下,jsonp是一種用來進行跨域傳輸信息的方法,不是json的親戚。

 

具體方法如下

客戶端:

 1                 $.ajax({
 2                     url: "testPage.aspx",
 3                     jsonp: "callback",
 4                     type: "get",
 5                     dataType: "jsonp",
 6                     data: { "studentCode": "5", "batch": "2001" },
 7                     success: function (result) {
 8                         alert(result.message);
 9                     },
10                     error: function () {
11                         alert("發送失敗");
12                     }
13                 });

看起來只是像普通的ajax方法,不過里面加上了回傳函數的方法名“jsonp”參數

這是用來用jsonp的形式回傳信息用的,jquery會根據這個callback參數取其中的內容。

 

客戶端方法:

        protected void Page_Load(object sender, EventArgs e)
        {
            string studentCode = Request.QueryString["studentCode"];
            string batch = Request.QueryString["batch"];
            string callback = Request.QueryString["callback"];

            var msg = new {message="收到!" };
            string result = new JavaScriptSerializer().Serialize(msg);
            Response.Write(callback+"("+result+")" );
        }

注意在使用jsonp的時候要注意接收 ajax中寫好的方法名參數,剛才上面寫的是"jsonp:'callback'"所以在服務端要取callback

在回傳的時候要以  ajax中的jsonp參數+(+結果值+) 的形式返回,

 

運行一下剛才的網頁,會發現jquery會以

testPage?callback=jQuery110207458065936286827_1445175684208&studentCode=5&batch=2001&_=1445175684213 HTTP/1.1

的方式像服務端發送請求,此時jquery已經將callback值寫好

callback=jQuery110207458065936286827_1445175684208

這樣jsonp就可以正常工作了

 

注意:

我在剛用ajax的時候沒有注意大小寫,$.ajax()方法的參數名對大小寫還是很敏感的,尤其是dataType,一定要Type大寫data小寫

否則會不起作用,怎么寫都回傳的是字符串格式。當時還疑惑為啥別人回傳jsonp是json格式 result.message就可以取值了,而我寫的

jsonp返回來的是callback(result:message),當時就是寫的datatype的結果。

 

注意返回值一定是json格式,並且在斷點調試的時候 獲得的jsonp參數值也就是上面的callback,一定能夠取到值類似"jQuery110207458065936286827_1445175684208",而不是 null,如果是null 那么說明你的ajax方法寫的有問題,趕緊去貼個

方法再試試,否則會走很多彎路。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM