Javascript 如何在Vue JS组件中发出AJAX删除请求?
我有一个Vue JS组件,其中包含一个模式,询问用户是否要删除带有“是/否”选项的特定记录。我希望在单击Yes按钮时发出一个AJAX删除请求,现在我正在尝试将AJAX代码移动到我的Vue组件中并使用Vue资源 当前删除时,我在chrome devtools控制台中收到以下错误消息: app.js:38907删除419(未知状态) 127.0.0.1/:1未捕获(承诺中)响应{url:“/clients/2/delete”,确定:错误,状态:419,状态文本:“未知状态”,标题:标题,…} 我尝试了以下代码: app.jsJavascript 如何在Vue JS组件中发出AJAX删除请求?,javascript,php,laravel,vue.js,Javascript,Php,Laravel,Vue.js,我有一个Vue JS组件,其中包含一个模式,询问用户是否要删除带有“是/否”选项的特定记录。我希望在单击Yes按钮时发出一个AJAX删除请求,现在我正在尝试将AJAX代码移动到我的Vue组件中并使用Vue资源 当前删除时,我在chrome devtools控制台中收到以下错误消息: app.js:38907删除419(未知状态) 127.0.0.1/:1未捕获(承诺中)响应{url:“/clients/2/delete”,确定:错误,状态:419,状态文本:“未知状态”,标题:标题,…} 我尝试
Vue.component('client', require('./components/ClientComponent.vue').default);
/**
* Next, we will create a fresh Vue application instance and attach it to
* the page. Then, you may begin adding components to this application
* or customize the JavaScript scaffolding to fit your unique needs.
*/
import VueResource from 'vue-resource';
Vue.use(VueResource);
const app = new Vue({
el: '.table-container',
});
ClientComponent.vue
<template>
<li :data-clientID="client.id"><a :href="this.homeRoute">{{ client.first_name + ' ' + client.last_name }}</a>
<span class="delete_x" data-toggle="modal" v-bind:data-target="delete_modal" :data-model="client.id">x</span>
<div class="modal fade" v-bind:id="delete_id" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="myModalLabel">Are you sure you want to delete client {{ client.first_name + ' ' + client.last_name }}?</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-footer">
<button type="button" v-on:click="onDelete" :data-clientID="client.id" class="delete_button btn btn-default" data-dismiss="modal">Yes</button>
<button type="button" class="btn btn-primary">No</button>
</div>
</div>
</div>
</div>
</li>
</template>
<script>
export default {
name: 'client',
props: {
client: {
type: Object,
required: true
},
homeRoute: {
type: String,
required: true
}
},
methods: {
onDelete: function (message) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$('.alert-success').hide();
this.$http.delete("/clients/" + this.client.id + "/delete")
.then(function(response) {
client.remove();
});
}
},
computed: {
delete_modal() {
return '#delete_modal_' + this.client.id;
},
delete_id(){
return 'delete_modal_' + this.client.id;
}
}
}
</script>
任何不良行为都会很有帮助
谢谢
Rob419表示csrf令牌丢失或不匹配 默认情况下,您可以修改每个请求以添加x-csrf-token。请在使用vueResource后放置此代码
Vue.use(VueResource)
Vue.http.interceptors.push(函数(请求){
request.headers.set('X-CSRF-TOKEN',$).attr('content');
});
您正在jquery$.ajax上配置CSRF令牌,然后使用Vue发出请求。请看下面的答案。谢谢您的回复。然后我将如何从DOM中删除特定的客户机?(如果您愿意,我可以在中打开另一张带有此信息的车票)。
Route::get('/clients/{client}/edit', ['as' => 'clients.edit', 'uses' => 'clientController@edit']);
Route::put('/clients/{client}/update', ['as' => 'clients.update', 'uses' => 'clientController@update']);
Route::delete('/clients/{client}/delete', ['as' => 'clients.delete', 'uses' => 'clientController@delete']);