Как получить данные из Go API, используя AJAX? - PullRequest
0 голосов
/ 04 мая 2018

Я получаю данные, используя ajax из golang api, но в функции успеха ajax ответ не возвращает пользовательские данные, в то время как golang возвращает их. Ниже я использую ajax:

$(document).ready(function(){
    $.ajax({
        url:"/api/v1/customer/:id",
        type: "GET",
        success: function(results){
            console.log(results) //it will not retrieving the data
        }
    });
});

Выход AJAX

//nothing

вот маршрутизатор Голанга:

Route{"GetFullCustomer", "GET", "/customer/:id", controller.GetCustomer}
// when I will hit this url then the function GetCustomer will run.
v1 := router.Group("/api/v1") // there is also grouping

Вот функция, которая извлекает пользователя:

func GetCustomer(c *gin.Context) {
  t, _ := template.ParseFiles("index.html")
  t.Execute(c.Writer, nil)
  customerIdString := c.Param("id")  //taking the id from url
  customerId, err := strconv.Atoi(customerIdString)
  mongoSession := config.ConnectDb()
  collection := mongoSession.DB("customer").C("customercollection")
  pipeline := []bson.M{
    bson.M{"$match": bson.M{"_id": customerId}},
    bson.M{"$lookup": bson.M{"from" : "address", "localField" : "_id", "foreignField": "user_id","as": "address" }},
    // bson.M{"$project":bson.M{"_id":0}}
  }
  pipe := collection.Pipe(pipeline)
  resp := []bson.M{}
  err = pipe.All(&resp)
  if err != nil {
     fmt.Println("Errored: %#v \n", err)
  }
 c.JSON(200, gin.H{"data": resp})
}

, нажав URL-адрес localhost http://localhost:8080/api/v1/customer/1 Вывод терминала:

[GIN] 2018/05/04 - 12:40:11 | 200 |   11.200709ms |             ::1 | GET      /api/v1/customer/1
[map[$match:map[_id:0]] map[$lookup:map[from:address localField:_id foreignField:user_id as:address]]]
[]
[GIN] 2018/05/04 - 12:40:11 | 200 |    6.986699ms |             ::1 | GET      /api/v1/customer/Person.png
[map[$match:map[_id:0]] map[$lookup:map[foreignField:user_id as:address from:address localField:_id]]]
[]
[GIN] 2018/05/04 - 12:40:12 | 200 |    1.619845ms |             ::1 | GET      /api/v1/customer/:id

Проблема заключается в том, что хотя указатель URL-адреса golang выше golang будет динамически принимать /:id и сопоставлять данные, но ajax не принимает этот идентификатор динамически. Так как я решу свою проблему.

1 Ответ

0 голосов
/ 04 мая 2018

Это может молча провалиться. Вам необходимо проверить Инструменты разработчика в вашем браузере. В Chrome есть вкладка Network, которая показывает информацию о каждом запросе AJAX. Вполне вероятно, что вызов AJAX по какой-то причине завершился неудачно, и вам необходимо выяснить, в чем заключается ошибка. Вы, вероятно, увидите это и на вкладке Console.

Кроме того, только что заметил, что для dataType задано значение "html", что кажется неправильным в зависимости от формата вывода, который вы описали. Вероятно, это должен быть "JSON".

Вы должны обрабатывать сбои в ваших AJAX-запросах, чтобы пользователь знал, что есть проблема. Вот код, с которого можно начать:

$(document).ready(function(){
    var promise = $.ajax({
        url:"/api/v1/customer/:id",
        type: "GET",
        dataType: 'json'
    });

    promise.done(function(data) {
        console.log(data);
    });

    promise.fail(function(jqXHR, textStatus, errorThrown) {
        console.log("Request failed. jqXHR.status=" + jqXHR.status + ", textStatus=" + textStatus + ", errorThrown=" + errorThrown);
    });
});
...