【问题标题】:Request aborted when trying to post data from vue js to laravel backend尝试将数据从 vue js 发布到 laravel 后端时请求中止
【发布时间】:2020-05-30 21:30:55
【问题描述】:

我整天都在为一个问题苦苦挣扎。每次我想从我的 vue js 组件向我的 laravel 后端发布数据时,它都会说请求已被中止。我真的看不出我的代码有什么问题。任何帮助是极大的赞赏。我已经安装了 CORS,所以这不是问题。我试图清除路由缓存,但也没有用。

控制器存储方法。在这里我检查标题是否存在,如果不存在,则继续将故事保存在数据库中:

public function store(
    AuthenticatedUserId $authenticatedUserId,
    CreateNewRecordInDatabase $createNewRecordInDatabase,
    FindDataById $findDataById, 
    RetrieveAllData $retrieveAllData,
    Request $request, 
    $writer
    )
{
    $writer = $findDataById->findDataById(User::class, $writer);

    $stories = $retrieveAllData->retrieveAllData(Story::class);

    foreach ($stories as $check_title) {
        if ($check_title->title == $request->title) {
            return redirect()
                ->route('writer.create', ['writer' => $authenticatedUserId->authId()])
                ->with('title_exists', 'Title already exists');
        }
    }

    $createNewRecordInDatabase->createRecord($writer->stories(), [
        'title' => $request->title,
        'story' => $request->story,
        'published_on' => date('m-d-Y'),
        'category_id' => $request->category_id
    ]);

    return response()->json('success');
}

API 路由:

Route::post('/dashboard/writer/{writer}/store', 'Story\StoryController@store');

Vue 组件:

<template>
<div class="row">
    <form class="col s12">
        <input type="hidden" name="_token" :value="csrf">

        <div class="row">
            <div class="col s12">
                <input  v-model="title" type="text" 
                        class="input-field" 
                        placeholder="Give it a catchy title" 
                        required
                        >
                <label for="title">Give it a catchy title</label>
            </div>
        </div>

        <div class="row">
            <div class="input-field col s12">
                <select v-model="category_id" name="category_id">
                     <option 
                        v-for="category in categories"
                        v-bind:key="category.id"
                        v-bind:value="category.id"
                        >{{ category.category }}
                     </option>
                </select>
            </div>
        </div>

        <div class="white col s12" id="editorjs"></div>

        <div class="col s12">
            <button @click="publishStory" class="btn waves-effect waves-light">Publish</button>
        </div>
    </form>

</div>

<script>

import EditorJS from '@editorjs/editorjs';
import Header from '@editorjs/header';
import Link from '@editorjs/link';
import List from '@editorjs/list';
import Quote from '@editorjs/quote';

export default {
    props: ['categories', 'writer'],
    data() {
        return  {
            title: null,
            category_id: null,
            story: [],
            editor: new EditorJS({
                tools: {
                    header: {
                        class: Header,
                        inlineToolbar: true
                    }, 
                    list: {
                        class: List,
                        inlineToolbar: true
                    }, 
                    link: {
                        class: Link,
                        inlineToolbar: true
                    },
                    quote: {
                        class: Quote,
                        inlineToolbar: true
                    }
                }
            }),
            csrf: document.querySelector('meta[name="csrf-token"]').getAttribute('content')
        }
    },
    methods: {
        publishStory() {
            this.editor.save()
            .then(outputData => this.story = outputData.blocks)
            .catch(err => console.log(err))
            axios.post(`http://localhost:8000/api/dashboard/writer/${this.writer}/store`, {
                    title: this.title,  
                    story: this.story,
                    category_id: this.category_id,
                })
                .then(res => console.log(res))
                .catch(err => console.log(err))
        }

    },
    mounted() {}
}
</script>

【问题讨论】:

  • 您是否检查过请求是否到达了正确的路线?
  • 在浏览器开发工具中检查您的网络选项卡。响应中通常有错误
  • @FouedMOUSSI 不,我没有。我该怎么做?
  • 检查网络选项卡并查看请求响应
  • @JoshKisb 我唯一看到的是源映射错误:错误:请求失败,状态为 404 源映射 URL:popper.js.map

标签: javascript laravel vue.js axios


【解决方案1】:

尝试增加php.ini设置

max_input_time 
upload_max_filesize
post_max_size   
memory_limit
max_input_vars

PHP Truncating POST Data

【讨论】:

  • 浏览了这篇文章,做了那些事,什么都没有。我要联系 codemnetor.io 上的导师,看看他/她是否可以提供帮助。因为这件事让我质疑现实本身,更不用说我的能力了:p。感谢您尝试...
  • 您是否重新启动了您的网络服务器?编辑你的 php.ini 后?
猜你喜欢
  • 2017-11-23
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 2022-06-24
  • 1970-01-01
  • 2018-08-23
相关资源
最近更新 更多