JavaScript/jQuery:将多个参数传递给 API 中的 POST 请求

Posted

技术标签:

【中文标题】JavaScript/jQuery:将多个参数传递给 API 中的 POST 请求【英文标题】:JavaScript/jQuery: Passing multiple parameters to a POST request in an API 【发布时间】:2019-08-03 15:53:14 【问题描述】:

我在管理新项目的 API 请求时遇到了一些麻烦。我正在尝试练习发出 POST 请求,并且我想在一个 POST 中传递多个参数。到目前为止,我已经尝试过创建一个 for 循环,该循环遍历一个数组以发出多个请求,但这似乎不起作用。我之前处理过简单的 GET 请求,但我似乎无法在不重写整个内容的情况下将多个参数传递给帖子。

这是我目前所拥有的:

let URL = "www.exampleapi.com";

这是我正在使用的数组,它们应该是狗窝里的狗。

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

狗所在的狗窝当前的 id 为 777

let kennelId = 777;

此 API 的 POST 请求需要 kennelId 和 dogId (dogArray.id),所以我想编写一个函数,循环遍历 dogArray 并记录各个 id。

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 调用?

【问题讨论】:

这可能很明显,但请确保dogIdkennelId 的类型是正确的类型(如数字、字符串、对象等)。也看看$.post。这对你来说可能更容易(我认为) 你不认为你的获取代码应该在循环内吗? 【参考方案1】:

我看到的主要问题是您没有将代码放入 POSTfor 外观中,因此它只会 POST一次,使用 for 循环分配的最后一个 dogId

此外,在将结果转换为 JSON 后,您不会对返回的数据执行任何操作。如果您查看 fetch 文档 here,您可以看到您需要添加另一个 .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 仅在您对结果执行某些操作时才需要,例如处理成功消息/状态。

我也不确定您是否打算使用 Promise 来执行此操作,fetch 方法是基于 Promise 的。 $.post 可以在 jQuery 中使用(more about that here)

【讨论】:

【参考方案2】:

希望这会有所帮助:

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

【讨论】:

以上是关于JavaScript/jQuery:将多个参数传递给 API 中的 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

使用 javascript/jquery,将表单变量传递给 iframe src 参数

有没有办法使用 javascript/Jquery 将未提交的输入字段的值属性作为 URL 的参数传递?

JavaScript + Jquery DataTable - 将数据传递到 defaultContent json 列

将 PHP $_POST 数组传递给 javascript/jQuery 以通过 ajax 发送回 PHP

如何使用 POST 方法将 javascript/jQuery 变量传递给 PHP [重复]

如何使用 Javascript、jQuery 对提交按钮应用多个操作?