Как получить значение запроса get в Javascript

#javascript #node.js #vue.js

#javascript #node.js #vue.js

Вопрос:

Я пытаюсь получить данные в объекте javascript, объект был сгенерирован из запроса get в API, и в сетевой консоли я могу четко видеть ответ как {«number»:»141″}, но всякий раз, когда я пытаюсь распечатать результат запроса, я получаю этот тип запроса.объект, который содержит значение, которое я хочу:

В консоли :

 Object { _c: [], _a: undefined, _s: 0, _d: false, _v: undefined, _h: 0, _n: false }
  

Но когда я расходую значение

 {
  "_c": [],
  "_s": 1,
  "_d": true,
  "_v": {
    "data": {
      "number": "141"
    },
    "status": 200,
    "statusText": "OK",
    "headers": {
      "content-type": "application/json; charset=utf-8"
    },
    "config": {
     [...]
}
  

Но каждый раз, когда я пытаюсь, кажется, что я не могу получить доступ к значению, используя только tab [‘_v’] .
Я пробовал несколько вещей, таких как :

 for (var key in x) {
            console.log(x[key])
        }
  

чтобы попытаться напечатать часть «_v», но
я не могу указать часть «_v» массива / объекта.

Шаги для получения такого результата :

.vue файл, вызывающий функцию

 export default {
    mounted() {

    var x=this.connectionsAlive()
    console.log(x)
    for (var property in x) {
        console.log(property)
    }
},
methods: {
        ...mapActions({
            connectionsAlive: 'mkt/connectionsAlive',
        })
    }
}
  

Затем он отправляется в файл с именем mkt-module .js, а затем mkt-api.js

 ---mkt-module---
import { connectionsAlive } from '@/api/mkt-api'
export default {
    namespaced: true,
    state: {
        test: '',

    },
    actions: {
        connectionsAlive() {
            const response = connectionsAlive()
            return response

        }
    }
}
----mkt-api----
import axios from 'axios'
import { getAbsoluteUrl } from '@/services/url-service'

export const connectionsAlive = () => (
    axios.get(`/api/DeviceEvents/connectionsAlive`)
)
  

И тело ответа, которое я получаю, является :

 JSON :
number : 141
  

Но когда я пытаюсь его распечатать, я получаю результат в верхней части этого сообщения.

Я явно что-то упускаю или просто знаю о структуре. Если у кого-нибудь есть идея, я охотно воспользуюсь помощью, спасибо.

Комментарии:

1. Можете ли вы показать нам, как вы делаете этот запрос get? Вы делаете запрос get в Node.js или Vue.js ?

2. да, конечно, я скопирую это, это vue.js запрос к циклическому API

3. У вас есть какие-либо ошибки? Публикация также ошибки может быть полезной, я попробовал ваш код, и он работает для того, что вы вставили, я думаю, нам нужно больше информации, как сказал Джозефтинг.

4. я вставлю результат итерации

5. Кажется, что вы вводите пустой объект. Вы проверили тело запроса / ответа? Пожалуйста, для уточнения вашего вопроса скопируйте весь ваш код, в котором вы выполняете операцию, а также запрос и ответ на / с сервера.

Ответ №1:

Поскольку

connectionsAlive

метод выполняет http-вызовы на сервер, это асинхронная операция.
Вы должны добавить .then() к this.connectionsAlive()

 this.connectionsAlive().then(x => {
    console.log(x)
    for (var property in x) {
        console.log(property)
    }
})
  

Я не пробовал, но надеюсь, что это поможет вам определить проблему.
Вы можете найти дополнительную информацию об обещаниях здесь: https://hackernoon.com/understanding-promises-in-javascript-13d99df067c1

Комментарии:

1. Когда я попытался добавить «возврат», я получил синтаксическую ошибку, но в противном случае я попытался использовать. тогда и все заработало. основываясь на том, что вы сказали, я написал это: this.connectionsAlive().then(x => { console.log(x.data.number) }) И все работает нормально, спасибо!

2. Хорошо, я отредактирую ответ, чтобы он был правильным. Добро пожаловать!