我有一个AJAX发布请求,将击中Golang后端。目标是编辑此请求之前,发送请求到外部的API端点。
ajax POST请求示例:
var ajaxParams = {
type: 'POST',
url: '/golang_endpoint', // golang backend endpoint
dataType: 'json',
data: encodeURIComponent(JSON.stringify(request)), // this is the form we want to send to an external endpoint
success: onResponse,
error: onError,
};
$.ajax(ajaxParams);
此请求将命中关联的Golang处理程序,我们希望在发送请求之前编辑其中的一些内容。但是,仅发送未进行任何编辑的请求时出现错误:
func golangEndpointHandler(rw http.ResponseWriter, req *http.Request) {
fmt.Println(req.PostForm)
resp, err := http.PostForm("webwsite.com/outside/endpoint", req.PostForm)
}
具体来说,我们在发送POST请求时收到500个内部服务器错误(例如:unexpected token at '='
)。使用req.PostForm
转发我们的请求数据是否正确?错误表明可能与解码/编码req.PostForm
或来自AJAX数据参数的数据有关?
print语句表明执行了json序列化:map[{"size":"1000","other_data":12345}:[]]
编辑:per@belindamichaels response.我相信ParseForm
做了某种编码/解码,一旦发送到外部端点,会导致500个响应。
当这种组合起作用时:
一个二个一个一个
这不会:
var ajaxParams = {
type: 'POST',
url: '/golang_endpoint'
dataType: 'json',
processData: false,
timeout: timeout,
data: request, // not stringified or url-encoded
success: onResponse,
error: onError,
};
req.ParseForm()
resp, err := http.PostForm("webwsite.com/outside/endpoint", req.PostForm)
尽管没有编辑请求,我们还是得到了500(特别是unexpected token at 'object Object]='
)。一旦准备好发送到外部端点,我如何对数据进行字符串化和urlencode?
注:以下组合也不起作用:
var ajaxParams = {
type: 'POST',
url: '/golang_endpoint'
dataType: 'json',
processData: false,
timeout: timeout,
data: encodeURIComponent(JSON.stringify(request)), // the change
success: onResponse,
error: onError,
};
req.ParseForm()
resp, err := http.PostForm("webwsite.com/outside/endpoint", req.PostForm)
我们得到一个类似的500错误:unexpected token at '='
1条答案
按热度按时间mzillmmw1#
要按原样转发请求,请用途:
如果你想编辑请求正文,服务器和客户端必须就请求正文的类型达成一致。下面是如何使用application/x-www-form-urlencoded。将表单原样传递给服务器。不要像问题中那样将表单编码为JSON。
在服务器上解析表单,编辑并发送它。