У меня возникли проблемы с 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('[email protected]')->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 без statustext
Вкладка сети показывает:
Там может быть несколько причин, почему вы получаете status: 0
как 403, 503, и вы должны взглянуть на вкладку Сеть в Chrome DevTools, чтобы увидеть реальный статус ответа.
Проблема была в том, что у меня было 2 формы на странице. Вторая форма показа для обзора, где происходила отправка, не имела @submit.prevent
атрибут добавлен ..