JavaScript / jQuery: передача нескольких параметров в запрос POST в API - PullRequest
0 голосов
/ 13 марта 2019

У меня возникли проблемы с управлением запросом API для нового проекта.Я пытаюсь на практике делать запросы POST, и я хотел передать несколько параметров в одном POST.До сих пор я пытался создать цикл for, который перебирает массив для выполнения нескольких запросов, но, похоже, это не работает.Раньше я обрабатывал простые запросы GET, но не могу понять, что могу передать несколько параметров в сообщение, не переписав его целиком.

Вот что у меня есть:

let URL = "www.exampleapi.com";

Вот массив, с которым я работаю, они должны быть собаками в питомнике.

let dogArray = [
{"id": 1,
"name": "Max" },
{"id": 2,
"name": "Jack"},
{"id": 3,
"name": "Bones" }
];

Питомник, в котором сейчас находятся собаки, имеет идентификатор 777

let kennelId = 777;

POST-запрос для этого API требует kennelId и dogId (dogArray.id), поэтому я хотел написать функцию, которая зацикливается на dogArray и записывает отдельные идентификаторы.

function getDogsInKennel(kennelId, dogArray) {

for (let i = 0; i < dogArray.length; i++) {
        //the API would assign a different dogId every time it looped through
        dogId = dogArray[i].id;
    }

fetch(URL, {
        method: 'POST',
        body: JSON.stringify(({ dogId: dogId, kennelId: kennelId })),
        headers:{
            'Content-Type': 'application/json'
        }
    }).then(result => result.json())
}

getDogsInKennel(kennelId, dogArray);

Как вы можетескажите, этот метод не работает.Должен ли я удалить всю функцию и попробовать что-то еще, или есть способ, которым это можно переписать, чтобы сделать несколько вызовов POST с использованием одного и того же массива?

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Надеюсь, это поможет:

function getDogsInKennel(kennelId, dogArray) {
let dogIds = []
for (let i = 0; i < dogArray.length; i++) {
        dogIds.push(dogArray[i].id);
    }

fetch(URL, {
        method: 'POST',
        body: JSON.stringify(({ dogId: dogIds, kennelId: kennelId })),
        headers:{
            'Content-Type': 'application/json'
        }
    }).then(result => result.json()).then((data) => {
      console.log(data)
    })
}

getDogsInKennel(kennelId, dogArray);
0 голосов
/ 13 марта 2019

Основная проблема, с которой я сталкиваюсь, заключается в том, что вы не помещаете свой код в POST внутри для просмотра, поэтому он будет только POST один раз, используя последний dogId, назначенный для loop

Кроме того, вы ничего не делаете с возвращенными данными после преобразования результата в JSON. Если вы извлекаете документацию для извлечения здесь , вы можете увидеть, что вам нужно добавить еще .then для обработки возвращаемого значения. Таким образом, вы получите что-то более похожее на эту функцию:

function getDogsInKennel(kennelId, dogArray) {

for (let i = 0; i < dogArray.length; i++) {
    dogId = dogArray[i].id;

    fetch(URL, {
      method: 'POST',
      body: JSON.stringify(({ dogId: dogId, kennelId: kennelId })),
      headers:{
        'Content-Type': 'application/json'
      }
    }).then(result => result.json())
    .then((data) => {
      // Process the result here 
    })
}

.then необходим только в том случае, если вы что-то делаете с результатом, например, обрабатываете сообщение об успехе / статус.

Я также не уверен, собираетесь ли вы использовать обещания для этого или нет, метод извлечения основан на обещаниях. Что-то более простое в использовании может быть $. Post доступно в jQuery ( подробнее об этом здесь )

...