رفتن به محتوا

JSONP

JSONP (JSON با Padding) تکنیکی برای ارسال درخواست‌های بین‌دامنه‌ای از مرورگرهایی است که قبل از پشتیبانی CORS بودند. این کار با بسته‌بندی پاسخ JSON در یک فراخوانی تابع JavaScript انجام می‌شود. مرورگر پاسخ را از طریق تگ <script> بارگذاری می‌کند که مشمول سیاست same-origin نیست و تابع بسته‌بندی با داده به عنوان آرگومان اجرا می‌شود.

وقتی c.JSONP() را فراخوانی می‌کنید، Gin پارامتر پرس‌وجوی callback را بررسی می‌کند. در صورت وجود، بدنه پاسخ به صورت callbackName({"foo":"bar"}) با Content-Type برابر application/javascript بسته‌بندی می‌شود. اگر callback ارائه نشود، پاسخ مانند فراخوانی استاندارد c.JSON() رفتار می‌کند.

package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/JSONP", func(c *gin.Context) {
data := map[string]interface{}{
"foo": "bar",
}
// The callback name is read from the query string, e.g.:
// GET /JSONP?callback=x
// Will output : x({\"foo\":\"bar\"})
c.JSONP(http.StatusOK, data)
})
// Listen and serve on 0.0.0.0:8080
router.Run(":8080")
}

با curl تست کنید تا تفاوت بین پاسخ‌های JSONP و JSON ساده را ببینید:

Terminal window
# With callback -- returns JavaScript
curl "http://localhost:8080/JSONP?callback=handleData"
# Output: handleData({"foo":"bar"});
# Without callback -- returns plain JSON
curl "http://localhost:8080/JSONP"
# Output: {"foo":"bar"}

همچنین ببینید