i want to send data in the form of row array, which is sent is "name" and "value" of each row, (1 row to next row)
below I save it to formData.append('data[kelompok_jenjang]', datas[i].name);
then post on the url with formData
data = [
{
"name": "Diploma",
"indicator": 2,
"value": 0
},
{
"name": "Dokter",
"indicator": 2,
"value": 0
},
{
"name": "Magister",
"indicator": 2,
"value": 0
},
{
"name": "Profesi",
"indicator": 2,
"value": 0
},
{
"name": "Sarjana",
"indicator": 2,
"value": 0
},
{
"name": "Sarjana Terapan",
"indicator": 2,
"value": 0
}
]
handleSaveTarget = async(e) =>{
e.preventDefault();
let data = this.data;
if(data !== undefined){
swal({
title: "Are You Sure ?",
text: "Save",
icon: "warning",
buttons: true,
dangerMode: false,
}).then((Agree) =>{
if(Agree){
var formData = new FormData();
let sessiondata = JSON.parse(localStorage.getItem("sessiondata"));
this.setState({display: true});
let datas = this.state.ref_data;
let arrayLength = datas.length;
for(var i=0; i < arrayLength; i++){
formData.append('data[id_sp]', sessiondata.i_idunit);
formData.append('data[id_point]', 1);
formData.append('data[kelompok_jenjang]', datas[i].name);
formData.append('data[value]', datas[i].value);
axios.post(AppConfig.SaveTarget, formData).then(res => {
swal({
title: datas.name,
text: "Target Masa Studi Berhasil Disimpan.",
icon: "success",
dangerMode: false,
})
}).catch(err=>{
swal({
title: datas.name,
text: "Target Masa Studi Gagal Disimpan.",
icon: "error",
dangerMode: false,
})
})
}
}
})
}else{
swal({
title: "Data Not Found",
text: "Something's Wrong!",
icon: "error",
// buttons: true,
dangerMode: false,
})
}
}
is there a better way than this to pass data in array form one by one, thanks
You need to make your function async to use the await keyword in order to wait each request to finish
swal({
title: "Are You Sure ?",
text: "Save",
icon: "warning",
buttons: true,
dangerMode: false,
}).then(async (Agree) => {
if (Agree) {
// Your code
for (var i = 0; i < arrayLength; i++) {
const formData = new FormData();
formData.append("data[id_sp]", sessiondata.i_idunit);
formData.append("data[id_point]", 1);
formData.append("data[kelompok_jenjang]", datas[i].name);
formData.append("data[value]", datas[i].value);
await axios
.post(AppConfig.SaveTarget, formData)
.then((res) => {
swal({
title: datas.name,
text: "Target Masa Studi Berhasil Disimpan.",
icon: "success",
dangerMode: false,
});
})
.catch((err) => {
swal({
title: datas.name,
text: "Target Masa Studi Gagal Disimpan.",
icon: "error",
dangerMode: false,
});
});
}
}
});
If you don't like use async and await keywords, I suggest this solution instead
swal({
title: "Are You Sure ?",
text: "Save",
icon: "warning",
buttons: true,
dangerMode: false,
}).then((Agree) => {
if (Agree) {
// Your code
let i = 0;
function send() {
const formData = new FormData();
formData.append("data[id_sp]", sessiondata.i_idunit);
formData.append("data[id_point]", 1);
formData.append("data[kelompok_jenjang]", datas[i].name);
formData.append("data[value]", datas[i].value);
axios
.post(AppConfig.SaveTarget, formData)
.then((res) => {
swal({
title: datas.name,
text: "Target Masa Studi Berhasil Disimpan.",
icon: "success",
dangerMode: false,
});
})
.catch((err) => {
swal({
title: datas.name,
text: "Target Masa Studi Gagal Disimpan.",
icon: "error",
dangerMode: false,
});
})
.finally(() => {
i++;
if (i < arrayLength) {
send();
}
});
}
send();
}
});