当前位置: 首页 > 面试题库 >

如何使用http.ResponseWriter在Go中形成JSONP响应?

耿学义
2023-03-14
问题内容

我正在开发一个在Go中接受JSONP请求的API。我可以将结构序列化为JSON并返回它,但是将JSON包装在padding或回调函数中有点尴尬,因为to的参数Write()需要是字节切片:

callback := req.FormValue("callback")

// ...

jsonBytes, _ := json.Marshal(resp)
if callback != "" {
    jsonStr := callback + "(" + string(jsonBytes) + ")"
    jsonBytes = []byte(jsonStr)
}
responseWriter.Write(jsonBytes)

我想我会将其封装在某些函数中。通常,我发现字符串/ [] byte转换很时髦。有一个更好的方法吗?


问题答案:

使用fmt.Fprintf简化它:

if callback != "" {
    fmt.Fprintf(w, "%s(%s)", callback, jsonBytes)
} else {
    w.Write(jsonBytes)
}

或者,如果您只想在一个地方写东西:

jsonBytes = []byte(fmt.Sprintf("%s(%s)", callback, jsonBytes))


 类似资料:
  • 问题内容: 我正在尝试将json对象导入变量。我根据教程使用服务。 我收到意外的令牌错误,因为我不应该使用 -但我真的不知道该使用什么。我用谷歌搜索了3个小时,发现只有$ http。或$ json。答案,但是我觉得可以做得更容易-更清晰。 (完美的解决方案是; D 服务文件: 控制器文件: json文件(几乎; D) 编辑: 我将$ resource(’file.json更改为https://ww

  • 问题内容: 标题说说我的问题。我需要将DTO包装到javascript方法回调中。目前,我应要求返回JSON。但是在Ajax中使用此问题,因为我将GET发送到其他域。当然还有治安警察。 我有创建附加提供的想法。有任何示例,链接或建议如何执行。 问题答案: RESTEasy中没有明确支持JSONP,但是在应用程序中启用JSONP的一种简单方法是编写Servlet过滤器。 这里有一些链接可以帮助您编写

  • 由于集群环境中的跨域问题,我试图使用jsonp数据类型执行ajax请求。 我可以将jsonp请求映射到没有@刚体参数的方法,但是当我尝试用@刚体参数实现一个请求映射时,我会得到一个415不支持的媒体类型错误。 通常,当我遇到这个问题时,是由于一些属性在发布的json对象和它在Spring中映射到的Java对象之间没有正确映射。但我能找到的唯一区别是,使用jsonp它添加了一个名为callback的

  • 问题内容: 我在WP网站上使用Gravity Forms。我的表单使用Pardot 表单处理程序通过ajax到Pardot进行POST 。我遇到一个问题,Pardot处理6x表单,没有其他错误。研究表明,这是因为Pardot不支持CORS或JSONP,因此在使用ajax提交时陷入了循环。当表单处理程序的成功URL设置为引用URL时,它正在处理提交,但从不“完成”。它会在放弃之前尝试使用6倍,每次处

  • 问题内容: 在python中,您可以按以下顺序生成带有键的JSON: 我在Go中找不到类似的选项。有什么想法可以在旅途中实现类似的行为吗? 问题答案: json包在编组时总是对密钥进行排序。特别: 地图按字典顺序对键进行排序 结构键按照结构中定义的顺序编组 该实现位于此处的ATM中: http://golang.org/src/pkg/encoding/json/encode.go?#L359

  • 问题内容: 在新的Go语言中,如何调用C 代码?换句话说,如何包装我的C 类并在Go中使用它们? 问题答案: 更新: 我已经成功地将一个小型测试C ++类与Go链接在一起 如果您使用C接口包装C ++代码,则应该可以使用cgo调用您的库(请参阅中的gmp示例)。 我不确定C ++中的类概念是否真的可以在Go中表达,因为它没有继承。 这是一个例子: 我有一个C ++类定义为: 我想在Go中使用。我将