dongyi7966 2016-04-29 16:35
浏览 491
已采纳

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

I've been using Postman to test my REST API (written in Go). Now is the moment of truth, connecting to the front end and I've hit a hiccup. I'm using jQuery.ajax to send a GET to my server, which should then send me back the response.

Note: Going to postman and sending a GET request to http://REMOTE_IP:8000/users/ returns the information I'm looking for, an array of User objects (JSON). It confuses me that it would work for Postman, but not 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);
    }
});

Go Backend

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)
}

I also have a logger attached to my go backend, and here are the request method and request URI that are printed out when I make the request:

GET /users?callback=jQuery223019655483671137586_1461946990647&_=1461946990648

Here are some articles I found useful:
The data which jquery $.ajax function return could not be parse to 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

Here are the errors returned with jQuery's err callback: enter image description here

What could be going wrong?

  • 写回答

2条回答 默认 最新

  • dongsou8980 2016-08-10 17:17
    关注

    # Answer

    I found a nice go library that handles the cross-origin problems I was having, meaning I didn't have to rely on jsonp. Here's the revised go code:

    Using the CORS Handler

    handler := cors.Default().Handler(r)
    err := http.ListenAndServe(port, handler)
    
    if err != nil {
        panic(err)
    }
    

    Revised handler

    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)
    }
    

    Calling from the frontend

    var extension = 'users/',
        requestPath = serverAddress + extension;
    
    $.ajax({
        url: requestPath,
        type: 'GET',
        dataType: 'json',
        contentType: 'application/json',
        success: successCall,
        error: failCall
    });
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)