最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - FormData is not serializing nested object array correctly in HTTP request - Stack Overflow

programmeradmin0浏览0评论

I'm working on a Next.js project where I need to send form data, including images and a nested object array (itineraries), to my API.

I have the following useState object:

 const [formData, setFormData] = useState({
  images: [],
  title: "",
  locationName: "",
  location: { lat: "", lon: "" },
  description: "",
  price: "",
  offerPrice: "",
  maxCapacity: "",
  duration: "",
  groupSize: "",
  language: ["English"],
  popularFeatures: [],
  included: [],
  excluded: [],
  highlights: "",
  itineraries: [
    { title: "Test", time: "10:00", image: null, description: "Sample", duration: 20 },
  ],
  peopleTypes: ["adult"],
  prices: { adult: "", child: "", infant: "" },
});

im submitting the form using FormData like this

    export const formatFormData = (formData) => {

    const data = new FormData();
  
  data.append("title", formData.title);
  data.append("locationName", formData.locationName);
  data.append("location", JSON.stringify(formData.location));
  data.append("description", formData.description);
  data.append("price", formData.price);
  data.append("offerPrice", formData.offerPrice);
  data.append("maxCapacity", formData.maxCapacity);
  data.append("duration", formData.duration);
  data.append("groupSize", formData.groupSize);
  data.append("language", JSON.stringify(formData.language));
  data.append("popularFeatures", JSON.stringify(formData.popularFeatures));
  data.append("included", JSON.stringify(formData.included));
  data.append("excluded", JSON.stringify(formData.excluded));
  data.append("highlights", formData.highlights);
  data.append("peopleTypes", JSON.stringify(formData.peopleTypes));
  data.append("prices", JSON.stringify(formData.prices));

  data.append("itineraries", JSON.stringify(formData.itineraries));

  // Append main images
  formData.images.forEach((image) => {
    data.append(`images`, image); // Append images (they will be stored as an array)
  });

  // Append images for itineraries
  formData.itineraries.forEach((itinerary, index) => {
    if (itinerary.image) {
      data.append(`itineraries[${index}][image]`, itinerary.image);
    }
  });
      
    return data;
};

and this is the data i get from client to server

title: 'Ab itaque sapiente m',
  description: '<p>Quis excepturi offic.</p>',
  location: '{"lat":34.0522,"lon":-118.2437}',
  locationName: 'Los Angeles',
  price: '688',
  prices: '{"adult":"","child":"","infant":"54"}',
  offerPrice: '309',
  peopleTypes: [ '["infant"]' ],
  duration: '5',
  groupSize: '10-15',
  language: [ '["Italian","English","Albanian","Spanish"]' ],
  maxCapacity: '10',
  popularFeatures: [ '["Relaxing","Swimming"]' ],
  highlight: '<p>Culpa ipsum, veniam.</p>',
  included: [ '["Neque nostrum ipsum"]' ],
  excluded: [ '["Porro in accusamus e"]' ],
  itineraries: [
    '[{"title":"Est ex eum natus vol","time":"17:38","image":{},"description":"Culpa mollitia volup","duration":"30"},{"title":"Quo aliqua Beatae a","image":{},"description":"Quia saepe animi re","duration":"26","time":"07:58"}]'  
  ]
}

but i cant not get the image as object is there any way to pass it as file object or should i sperate it in other field

发布评论

评论列表(0)

  1. 暂无评论