- Published on
ASP.NET MVC - JSONP
之前公司有用到跨網域存取的需求,所以就研究了一下 Jsonp
先來看在 asp.net mvc 的 Jsonp 要怎麼寫
寫一個自定的 JsonpResult
繼承 JsonResult
並且 override ExecuteResult
用 context.httpContext
去取得 response
和 request
如果沒有指定 ContentType
,預設就用 application/json
如果有 callback
的參數就當成是 jsonp
,沒有的話就當成一般的 json
Controller
的話就很簡單
最後 new JsonpResult
把傳進來的 tc
當成 data
回傳
先測試一下在網址傳入 tc = 123
是否有正確的返回
多傳入 callback = cashcall
回傳就變成 Jsonp 的格式
不過一般是用 jQuery Ajax 呼叫,所以下面改用 Chrome 的 console
來作測試
先找一個有 jQuery 的網頁,用 jQuery.ajax
來呼叫前面寫好的網頁
會出現 No Access-Control-Allow-Origin
的錯誤
這個時候就改用 jsonp 的方式呼叫
多加入 dataType : "jsonp"
這樣子就可以正確的呼叫到而且不會出錯
下面是執行時的情況
dataType 指定為 jsonp
時,jQuery 會自已產生出 callback
如果要用自定的 callback
時
只要多傳 jsonp : "callback"
和 jsonpCallback : "cashcall"
(自定的 callback 名稱)
callback 就會換成自定義的名稱了
參考連結:
- http://www.cnblogs.com/wintersun/archive/2012/05/25/2518572.html
- http://stackoverflow.com/questions/4795201/asp-net-mvc-3-jsonp-does-this-work-with-jsonvalueproviderfactory
- http://stackoverflow.com/questions/1647519/jquery-getjson-inside-a-greasemonkey-user-script
- http://meebox.blogspot.tw/2012/06/jquery-jsonp.html