Add Jsonp Support to Context (#1333)

This commit is contained in:
senhtry
2018-04-26 11:52:19 +08:00
committed by Bo-Yi Wu
parent 41f951e0cd
commit 8c24018290
6 changed files with 114 additions and 0 deletions
Regular → Executable
+32
View File
@@ -6,6 +6,7 @@ package render
import (
"bytes"
"html/template"
"net/http"
"github.com/gin-gonic/gin/json"
@@ -24,9 +25,15 @@ type SecureJSON struct {
Data interface{}
}
type JsonpJSON struct {
Callback string
Data interface{}
}
type SecureJSONPrefix string
var jsonContentType = []string{"application/json; charset=utf-8"}
var jsonpContentType = []string{"application/javascript; charset=utf-8"}
func (r JSON) Render(w http.ResponseWriter) (err error) {
if err = WriteJSON(w, r.Data); err != nil {
@@ -80,3 +87,28 @@ func (r SecureJSON) Render(w http.ResponseWriter) error {
func (r SecureJSON) WriteContentType(w http.ResponseWriter) {
writeContentType(w, jsonContentType)
}
func (r JsonpJSON) Render(w http.ResponseWriter) (err error) {
r.WriteContentType(w)
ret, err := json.Marshal(r.Data)
if err != nil {
return err
}
if r.Callback == "" {
w.Write(ret)
return nil
}
callback := template.JSEscapeString(r.Callback)
w.Write([]byte(callback))
w.Write([]byte("("))
w.Write(ret)
w.Write([]byte(")"))
return nil
}
func (r JsonpJSON) WriteContentType(w http.ResponseWriter) {
writeContentType(w, jsonpContentType)
}