繁体   English   中英

Jquery Ajax不会返回数据(解析错误),但Postman会成功

[英]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。

jQuery Get

$.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

以下是jQuery的错误回调返回的错误: 在此输入图像描述

怎么可能出错?

首先检查您的服务器是否可以使用以下测试来处理JSONP请求。

http://REMOTE_IP:8000/users?callback=myFunction

响应而不是这个(如果它不支持JSONP,它将看起来像这样):

{ "thing": "value" .... }

应该是这样的(再次,如果它支持JSONP):

myFunction({ "thing": "value" .... });

#答案

我发现了一个很好的go库来处理我遇到的跨源问题,这意味着我不必依赖jsonp。 这是经过修改的go代码:

使用CORS处理程序

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM