Сообщение Vue JS HTTP с кодом состояния API 0 перенаправляет на вопросительный знак

У меня возникли проблемы с HTTP-сообщением в моем собственном API.

сценарий

У меня есть форма сборки в компоненте Vue. Форма для запроса ценового предложения.

Всякий раз, когда сообщение проходит, я хочу перенаправить веб-приложение на URL благодарности. Локально форма отправляет штраф и перенаправляет на правильный URL.

На сервере я получаю код состояния HTTP 0 без текста состояния в JavaScript. Итак .then() функция полностью игнорируется. Почтовый запрос, однако, проходит полностью. Я отправляю электронное письмо прямо перед тем, как вернуть JSON на почту. И это электронное письмо отправляет отлично.

Проблема сейчас в том, что может пойти не так!

Что я пробовал

  • изменяя .then() в .done()
  • только отправка электронной почты без вставки всей красноречивой базы данных. все работало локально но не на сервере.

Код

Код моей функции контроллера (создание делает строки в базе данных):

    public function send(Request $request)
{
    $this->validate($request, [
        'companyname' => 'required',
        'address'     => 'required',
        'address2'    => 'required',
        'postalcode'  => 'required',
        'city'        => 'required',
        'country'     => 'required',
        'initials'    => 'required',
        'lastname'    => 'required',
        'email'       => 'required',
        'telephone'   => 'required',
    ]);

    $quotation = Quotation::create([
        'company_name' => $request->companyname,
        'address'      => $request->address,
        'address2'     => $request->address2,
        'city'         => $request->city,
        'country'      => $request->country,
        'postalcode'  => $request->postalcode,
        'debtor_code'  => $request->debtor_code,
        'gender'       => $request->gender == 'male' ? 'M' : 'F',
        'initials'     => $request->initials,
        'firstname'    => $request->firstname,
        'lastname'     => $request->lastname,
        'email'        => $request->email,
        'telephone'    => $request->telephone,
        'vat'          => $request->vat ?: null
    ]);


    $attachments = collect();

    collect($request->json('products'))->each(function ($data) use ($quotation, $attachments) {
        $product = $quotation->products()->create([
            'quotation_id'         => $quotation->id,
            'description'          => $data['description'],
            'house_formulation'    => $data['formulation_type'] == "house_formulation" ? true : false,
            'own_formulation'      => $data['formulation_type'] == "own_formulation" ? true : false,
            'formulation_text'     => $data['formulation'],
            'product_kind'         => $data['product_kind'],
            'packaging_kind'       => $data['packaging_kind'],
            'packaging_content'    => $data['packaging_content'],
            'product_quantity'     => $data['product_quantity'],
            'delivery_time'        => $data['delivery_time'],
            'remarks'              => $data['remarks']
        ]);

        $formulationBlob = base64_decode(substr(strstr($data['formulation_document'], ','), 1));
        $product->setDocument($data['formulation_filename'], $formulationBlob);

        if($data['formulation_document']){
            $attachments->push([
                'product'   =>  $product->id,
                'file'      =>  asset("storage/{$product->document->path}"),
                'options' => []
            ]);
        }
    });

    Mail::to('sales@cobeco-privatelabel.nl')->send(new QuotationRequest($quotation, $attachments));

    return response()->json([
        'status' => 'OK',
    ], 200);
}

Код поста vue-ресурса:

submitRequest() {
            this.$http.post('/quotation-request', {
                products: this.products,
                debtor_code: this.debtor_code,
                address: this.address,
                address2: this.address2,
                postalcode: this.postalcode,
                city: this.city,
                country: this.country,
                vat: this.vat,
                gender: this.gender,
                initials: this.initials,
                firstname: this.firstname,
                lastname: this.lastname,
                email: this.email,
                telephone: this.telephone,
                companyname: this.companyname,
            }).then(request => {
                //THIS SHOULD FIRE. BUT WE IGNORE THE THEN FUNCTION.
                window.location = '/quotation-request/thanks';
            }, (response) => {
                console.log(response);
                if (response.status == 422) {
                    this.errors.record(response.body);
                    bootbox.alert("Er ging iets fout! zijn alle velden ingevuld? <br><br>Klik op de knop 'Edit quotation request' om terug te gaan naar het formulier");
                } else {
                    bootbox.alert("Er ging iets goed fout. Neem contact op met de systeembeheerder !")
                }
            });
        },

И в моей консоли код 0 без status text И в моей консоли код 0 без status text

Вкладка сети показывает:

Вкладка сети показывает

2 ответа

Решение

Проблема была в том, что у меня было 2 формы на странице. Во второй форме, отображающей обзор, где происходила отправка, не было @submit.prevent атрибут добавлен..

Там может быть несколько причин, почему вы получаете status: 0 как 403, 503, и вы должны взглянуть на вкладку Сеть в Chrome DevTools, чтобы увидеть реальный статус ответа.

Другие вопросы по тегам