在JavaScript中,如何在使用fetch进行POST时仅更新JSON数组中的一个值?

eufgjt7s  于 2023-11-20  发布在  Java
关注(0)|答案(1)|浏览(123)

有一个方法getCustomer(id),它从API返回JSON

{
    "id": 29,
    "name": "Rob",
    "checkin_status": false,  
}

字符串
我试图写一个update方法,它只改变那个使用fetch的客户的签入状态:

function checkIn(id) {

  url = "http://127.0.0.1:8000/customers/update_customer/" + id
 
  var data = new getCustomer(id);
  
  for( var k = 0; k < data.length; ++k ) {
    if( data[k]['job_checked_in'] == false ) {
      console.log("job_checked_in is false");
      data[k]['job_checked_in'] = true ;
    }
    else {
      console.log('job_checked_in was true');
    }
  }

  fetch(url, {
    method: "POST",
    body: JSON.stringify(data),
    headers: {
      'Content-type': 'application/json; charset=UTF-8'
    }
  })
  .then(response => response.json())
  .then(json => console.log(json))

}


但for循环似乎不起作用。
我如何修复它,或者当POST到API时,是否有更好的方法来替换JSON数组中的单个值?我尝试发布单个键/值对,而不是整个数组,它发布了,但它在服务器端不起作用。

xn1cxnb4

xn1cxnb41#

如果我理解正确的话,您希望更改用户的签入状态,该用户将id作为参数传递给checkIn函数。
首先,您没有检查要更新的用户是否必须与函数中传递的用户具有相同的id。
此外,您应该使用.findIndex()方法,而不是迭代数组,直到找到正确的用户:

const userIndex = data.findIndex( user => user.id === id);
if(userIndex !== -1) {
    data[userIndex].checkin_status = true;
} else {
    // handle error for no user found
}

字符串
然而,我不确定为什么你应该把整个数组发布到端点来只更新一个用户。了解服务器端端点是如何工作的以及为什么只发布一个用户不起作用会很有帮助。

相关问题