1kiomars
5 سال پیش توسط 1kiomars مطرح شد
9 پاسخ

نحوه ی پاس دادن ابجکت formData در اکشن vuex

action به این صورت تعریف شده

  storePost ({commit, dispatch}, {form,formData}) {

    commit('STORE_POST')

    return new Promise((resolve, reject) => {

      axios.post(Config.apiPath + 'post', form,{  formData })
        .then(
          response => {
            commit('STORE_POST_OK', response.data.post);
            resolve()
          })
        .catch(error => {
          commit('STORE_POST_FAIL')
          reject(error.response.data)
        })
    })
  },

داخل کامپوننت هم به این صورت تعریف کردم

let formData = new FormData();
    formData.append('file', this.form.file);
    this.storePost({formData,form})
          .then(() => {
            this.addToastMessage({
              text: 'New Post record was added!',
              type: 'success'
            })
              this.errors = {}
          })
            .catch((data) => {
                this.errors = data.errors || {}
            })
      },

ولی این ارور دریافت میکنم

payload: undefined

دوستان ممنون میشم راهنمایی کنید


ثبت پرسش جدید
علی 1374
تخصص : (fullstack(laravel , vue
@lionleo1374 5 سال پیش مطرح شد
0

سلام
برای اکشن تنها باید یک پارامتر پاس داده بشه مثلا payload و اگر مثل شما چندتا چیز خواستین بفرستین باید کلا اون را داخل یه آبجکت بریزین و بعد آبجکت را به عنوان payload ارسال کنید حالا در مورد شما باید اون مدیایی که میخواین بفرستین و بقیه اطلاعات فرم رو کلا با هم در formdata بایند کنید و در نهایت او formdata را بفرستین


1kiomars
@kiomars.geytasii 5 سال پیش مطرح شد
0

میشه نمونه کد رو هم بفرستید


1kiomars
@kiomars.geytasii 5 سال پیش مطرح شد
0

دوستان لطفا راهنمایی کنید


علی 1374
تخصص : (fullstack(laravel , vue
@lionleo1374 5 سال پیش مطرح شد
0

@kiomars.geytasii
سلام شما مثلا یه فرم دارین که شامل name , username, image میشه حالا برای هرکدوم از اینها یه property تو data کامپوننت درست کردی و وقتی کاربر دکمه send زد یه اکشن dispatch میکنی حالا برای ارسال پارامتر به این اکشن میای یه متغییر میسازی به نام مثلا formdata و اونو مساوی FormData میگذاری بعد هر کدوم از این پروپرتی ها رو به این فرم دیتا پاس میدی

let formData=new FormData()
formData.append('name',this.name)

و همینجوری کل اطلاعات را بهش بایند میکنی و بعد اون متغییر رو به اکشن پاس میدی

this.$store.dispatch('storePost',formData)

1kiomars
@kiomars.geytasii 5 سال پیش آپدیت شد
0

formData رو فقط برای پروپرتی file میخام


علی 1374
تخصص : (fullstack(laravel , vue
@lionleo1374 5 سال پیش مطرح شد
1

تمام پروپرتی های فرمتون را باید به متغییر formData اپند کنید هم title ,description ,.. و در نهایت اون formData را بفرستین


1kiomars
@kiomars.geytasii 5 سال پیش آپدیت شد
0

اوکی امتحان میکنم


علی 1374
تخصص : (fullstack(laravel , vue
@lionleo1374 5 سال پیش آپدیت شد
0
  data() {
            return {
                form: new Form({
                    name: '',
                    image: '',
                    bio: '',
                    username: '',
                    tags:'',
                }),

            };
        },
   send() {
                let profile = new FormData();
                this.form.keys().forEach(key => {
                    profile.append(`${key}`, this.form[key]);
                });

this.$store.dispatch('your action',profile)

}

@kiomars.geytasii


1kiomars
@kiomars.geytasii 5 سال پیش آپدیت شد
0

این ارور دریافت میکنم

key is not defined


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام