تخطَّ إلى المحتوى

JSONP

JSONP (JSON مع الحشو) هي تقنية لإجراء طلبات عبر النطاقات من المتصفحات التي سبقت دعم CORS. تعمل عن طريق لف استجابة JSON في استدعاء دالة JavaScript. يحمّل المتصفح الاستجابة عبر علامة <script>، التي لا تخضع لسياسة نفس المصدر، وتُنفذ الدالة الملفوفة مع البيانات كوسيطتها.

عند استدعاء 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"}

انظر أيضاً