隨著前後端分離的普及,前端透過 Ajax 技術呼叫後端介面並取得資料已成為 Web 開發中的常見操作。
然而,由於瀏覽器的同源策略,不同來源(協定、網域名稱或連接埠不同)的網頁無法互相存取自己的 DOM 和 Cookie,這就使得跨網域存取成為一個很普遍的需求。針對這個問題,現在已經有許多方法可以解決。
本文將介紹三種 PHP 實作 Ajax 跨域的方法。
JSONP(JSON with Padding)在前端發起跨域請求時是一種很流行的解決方式。它實際上是一種「欺騙」瀏覽器的方式,利用 標籤沒有跨域限制的特性來實現跨域存取。它的原理是透過在服務端動態產生用於回應請求的JavaScript 程式碼片段,該程式碼片段會呼叫一個特定名稱(回呼函數名)的JavaScript 函數,並將服務端處理的資料作為參數傳遞給此函數,從而達到跨域訪問的效果。
JSONP 的使用方式如下:
function handleJsonp(data) { console.log(data); } const script = document.createElement('script'); script.src = 'http://example.com/api?callback=handleJsonp'; document.head.appendChild(script);
'bar'); $callback = $_GET['callback']; echo sprintf('%s(%s);', $callback, json_encode($data)); ?>