天天看點

使用jsonp實作跨源請求

jsonp

  • 該技術用來實作跨源請求,即向協定、域名、端口号不同的伺服器發送請求
  • 通過使用 script 标簽的 src 向伺服器發送GET請求

    http://xxx/xxx?callback=callbackFunction

  • 伺服器傳回的是一串 javascript 并且會立刻在用戶端執行

    callbackFunction(data)

例子:
// 用戶端
function usejsonp() {
    const script = document.createElement("script");
    script.src = "http://127.0.0.1:8000/test?callback=jsonp";
    script.addEventListener("error", () => {
        console.log("error");
    });
    document.body.appendChild(script);
}

function jsonp(data) {
    console.log(data);
}
           
// 伺服器端
app.get("/test", (req, res) => {
    const params = new URL(req.url, req.headers.referer);
    res.writeHead(200, { "Content-Type": "text/javascript" });
    const data = JSON.stringify({ state: "succeess" });
    const reqdata = `${params.searchParams.get("callback")}(${data})`;
    res.end(reqdata);
});