JSONP

 

一、

1、JSONP 代表 JSON with Padding。

2、有時候需要做跨網域傳送 JSON 格式時,瀏覽器預設是不允許的,這時可利用 JSONP 來處理。

 

二、後端的建立

HomeController.cs 內容為

using System.Text;
using System.Web.Mvc;

namespace WebApplication1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index(string mycallback)
        {
            string s = @"{ ""name"":""John"", ""age"":30, ""city"":""New York"" }";
            return Content(mycallback + "(" + s + ");", "application/json", Encoding.UTF8);
        }
    }
}

 

三、前端的測試

<!DOCTYPE html>
<html>

<body>

    <h2>Request With a Callback Function</h2>
    <p>The backend returns a call to the function you send as a callback.</p>

    <button onclick="clickButton()">Click me!</button>

    <p id="demo"></p>

    <script>
        function clickButton() {
            var s = document.createElement("script");
            s.src = "http://219.85.157.132/Home/Index?mycallback=myDisplayFunction";
            document.body.appendChild(s);
        }

        function myDisplayFunction(myObj) {
            document.getElementById("demo").innerHTML = myObj.name;
        }
    </script>

</body>

</html>

 

假設後端主機的位置是 http://219.85.157.132,

則路徑 http://219.85.157.132/Home/Index?mycallback=myDisplayFunction,將會回傳如下內容

myDisplayFunction({ "name":"John", "age":30, "city":"New York" });

其意思為一旦發出 request 到路徑 http://219.85.157.132/Home/Index?mycallback=myDisplayFunction 之後,

response 回來要求立刻執行 myDisplayFunction(); 方法,

從上面範例可得知已經定義好方法的執行內容

function myDisplayFunction(myObj) {
    document.getElementById("demo").innerHTML = myObj.name;
}

而 myObj 參數內容已知為 { "name":"John", "age":30, "city":"New York" }

 

結果畫面則為

 

最後再提供一個 JSONP 來源供讀者測試

https://demos.telerik.com/kendo-ui/service/products?callback=funcName