[英]Jquery Ajax won't return the data (parse error), but Postman succeeds
我一直在使用Postman来测试我的REST API(用Go编写)。 现在是真实的时刻,连接到前端,我打了一个打嗝。 我正在使用jQuery.ajax向我的服务器发送一个GET,然后该服务器应该将响应发回给我。
注意 :去邮递员并向http://REMOTE_IP:8000/users/
发送GET请求http://REMOTE_IP:8000/users/
返回我正在寻找的信息,一组用户对象(JSON)。 令我困惑的是它适用于Postman,但不适用于jQuery。
$.ajax({
url: "http://REMOTE_IP:8000/users/",
type: "GET",
dataType: 'jsonp',
contentType: 'application/json',
success: function(data) {
console.log(data);
},
error: function(jqXHR, status, err) {
console.log(jqXHR);
console.log(status);
console.log(err);
}
});
func GetUsersRoute(w http.ResponseWriter, r *http.Request) {
var queryResult []models.User
queryErr := Config.Users.Find(bson.M{}).All(&queryResult)
resultsJSON, jsonErr := json.Marshal(queryResult)
handleQueryAndJsonErrors(w, queryErr, jsonErr)
// added these for cors, not sure they do anything helpful
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.Header().Set("Access-Control-Request-Headers", "*")
w.WriteHeader(http.StatusOK)
w.Write(resultsJSON)
}
我还有一个记录器附加到我的后端,这里是我发出请求时打印出来的请求方法和请求URI:
GET /users?callback=jQuery223019655483671137586_1461946990647&_=1461946990648
以下是我发现有用的一些文章:
jquery $ .ajax函数返回的数据无法解析为json
https://github.com/codegangsta/martini-contrib/blob/master/cors/cors.go
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Methods
怎么可能出错?
首先检查您的服务器是否可以使用以下测试来处理JSONP请求。
http://REMOTE_IP:8000/users?callback=myFunction
响应而不是这个(如果它不支持JSONP,它将看起来像这样):
{ "thing": "value" .... }
应该是这样的(再次,如果它支持JSONP):
myFunction({ "thing": "value" .... });
我发现了一个很好的go库来处理我遇到的跨源问题,这意味着我不必依赖jsonp。 这是经过修改的go代码:
handler := cors.Default().Handler(r)
err := http.ListenAndServe(port, handler)
if err != nil {
panic(err)
}
func GetUsersRoute(w http.ResponseWriter, r *http.Request) {
var queryResult []models.User
queryErr := Config.Users.Find(bson.M{}).All(&queryResult)
resultsJSON, jsonErr := json.Marshal(queryResult)
handleQueryAndJsonErrors(w, queryErr, jsonErr)
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
w.Write(resultsJSON)
}
var extension = 'users/',
requestPath = serverAddress + extension;
$.ajax({
url: requestPath,
type: 'GET',
dataType: 'json',
contentType: 'application/json',
success: successCall,
error: failCall
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.