İçeriğe geç

JSONP

JSONP (JSON with Padding), CORS desteği öncesi tarayıcılardan çapraz alan istekleri yapmak için kullanılan bir tekniktir. Bir JSON yanıtını bir JavaScript fonksiyon çağrısıyla sarmalayarak çalışır. Tarayıcı yanıtı, aynı köken politikasına tabi olmayan bir <script> etiketi aracılığıyla yükler ve sarmalayan fonksiyon veri argümanıyla çalışır.

c.JSONP() çağırdığınızda, Gin bir callback sorgu parametresi arar. Mevcutsa, yanıt gövdesi callbackName({"foo":"bar"}) şeklinde sarmalanır ve Content-Type application/javascript olarak ayarlanır. Callback sağlanmadıysa, yanıt standart bir c.JSON() çağrısı gibi davranır.

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")
}

JSONP ve düz JSON yanıtları arasındaki farkı görmek için curl ile test edin:

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"}

Ayrıca bakınız