RouteCollection.php 第 218 行 Laravel 5.1 中的 MethodNotAllowedHttpException 使用 Knockout js 和 Ajax
MethodNotAllowedHttpException in RouteCollection.php line 218 Laravel 5.1 using Knockout js and Ajax
大家好,我是这个社区的新成员。我正在使用 Laravel 5.1 开发 Web 应用程序,我想从 ajax POST 请求调用我的模型 Sale
的方法存储,但我从控制台获得了这个:
MethodNotAllowedHttpException in RouteCollection.php line 218
会是什么?非常感谢。
这些是我的路线:
//Rutas para inicios de sesión
Route::resource('log', 'LogController');
Route::get('logout','LogController@logout');
//Rutas generales
Route::get('/', 'WelcomeController@index');
Route::get('index', 'WelcomeController@indexdos');
//Routes for users
Route::get('user/actualizar','UserController@actualizar');
Route::get('user/deleter','UserController@deleter');
Route::resource('user', 'UserController');
//Routes for pacients
Route::get('pacient/deleter','PacientController@deleter');
Route::get('pacient/actualizar','PacientController@actualizar');
Route::resource('pacient', 'PacientController');
//Routes for medicaments
Route::get('medicament/deleter','MedicamentController@deleter');
Route::get('medicament/actualizar','MedicamentController@actualizar');
Route::resource('medicament', 'MedicamentController');
//Routes for doctors
Route::get('doctor/deleter','DoctorController@deleter');
Route::get('doctor/actualizar','DoctorController@actualizar');
Route::resource('doctor', 'DoctorController');
//Routes for dates
Route::get('date/deleter','DateController@deleter');
Route::get('date/actualizar','DateController@actualizar');
Route::get('date/bitacora','DateController@bitacora');
Route::resource('date', 'DateController');
//Routes for sales
Route::resource('sale', 'SalesController');`
这是包含我要发送给 sale.store
的值的表单
@extends('layouts.principal')
@include('Ventas.forms.barra')
@section('content')
<div class="container">
{!!Form::open()!!}
<input type="hidden" name="_token" value="{{ csrf_token()}}" id="token"></input>
@include('Ventas.forms.sale')
<button id="btnAgregar" data-bind="click: $root.agregarVenta" class="btn btn-success">Registrar venta</button>
{!!Form::close()!!}
</div>
@stop
如您所见,我包含了 'sale' 表单,其中包含了 knockout js 代码:
<div class="form-group">
<table>
<tr>
<td>{!!Form::label('id_doctor_1','Cita a la cual se facturará: ')!!}</td>
<td><select data-bind="options: $root.citas, optionsText: function(item) {
return item.paciente() + ' (Fecha: ' + item.fecha() + ' , Hora: ' +item.hora() + ')'
},
value: selectedDate,
optionsCaption: 'Elija una cita...'"></select></td>
</tr>
<tr>
<td>{!!Form::label('Producto:')!!}</td>
<td><select data-bind="options: $root.productos, optionsText: function(item) {
return item.nombre() + ' (Precio de venta: ' + item.precio_venta() + ' ,Existencias: ' +item.existencias() + ')'
},
value: selectedProduct,
optionsCaption: 'Elija un producto...'"> </select></td>
<tr>
<td>{!!Form::label('cantidad:')!!}</td>
<td><input type="number" data-bind="value: cantidad"></input></td>
</tr>
</table>
</div>
<div class="form-group">
<label for="btnAgregar" class="col-sm-2 control-label"></label>
<div class="col-sm-10">
<button id="btnAgregar" data-bind="click: $root.agregarProducto_venta" class="btn btn-primary col-sm-8 col-md-offset-1">Agregar producto a la venta actual</button>
</div>
</div>
<div class="form-group">
<br><br/><br><br/>
</div>
<div data-bind="visible: selectedDate"> <!-- Appears when you select something -->
<div class="post format-image box masonry-brick">
<!-- Begin Blog Grid -->
<div class="blog-wrap">
<table>
<tr>
<td><strong>Detalles de cita elegida</strong></td>
</tr>
<tr>
<td><strong>Paciente:</strong></td>
<td><span data-bind="text: selectedDate() ? selectedDate().paciente : 'unknown'"></span></td>
</tr>
<tr>
<td><strong>Producto:</strong></td>
<td><span data-bind="text: selectedDate() ? selectedDate().producto : 'unknown'"></span></td>
</tr>
<tr>
<td><strong>Cantidad:</strong></td>
<td><span data-bind="text: selectedDate() ? selectedDate().cantidad : 'unknown'"></span></td>
</tr>
<tr>
<td><strong>Subtotal:</strong></td>
<td><span data-bind="text: selectedDate() ? selectedDate().subtotal : 'unknown'"></span></td>
</tr>
<tr>
<td><br><br></td>
</tr>
<tr>
<td><strong>Productos a facturar</strong></td>
</tr>
<tr>
<td colspan="2"></td>
</tr>
</table>
<table>
<thead>
<tr><th>Nombre del producto____|</th><th>Precio____|</th><th>Cantidad____|</th><th>Subtotal____|</th><th>Acción____|</th></tr>
</thead>
<tbody data-bind="foreach: productos_venta">
<tr>
<td data-bind="text: producto"></td>
<td data-bind="text: precio"></td>
<td data-bind="text: cantidad"></td>
<td data-bind="text: subtotal"></td>
<td><a href="#" data-bind="click: $root.removeProduct">Remover</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h3 style="color:#FAFAFA" data-bind="visible: totalSurcharge() > 0">
Total (incluyendo medicamentos y cita): $<span data-bind="text: totalSurcharge().toFixed(2)"></span>
</h3>
最后这是我的 app.js
文件,应该是当我单击按钮 btnAgregar
时,方法 agregarVenta
发出 ajax 请求类型 POST,但它不起作用,我做错了什么?再次感谢。
文件app.js
(ajax方法):
//Método para agregar una nueva venta al arreglo de ventas, y después pasarlo
//a la base de datos.
self.agregarVenta=function(){
// crea un nuevo objeto Venta y después lo añade al arreglo.
var id_cita = self.selectedDate().id();
var venta= new Venta({id_cita: id_cita,producto: self.selectedDate().producto(),
cantidad: self.selectedDate().cantidad(),subtotal: self.selectedDate().subtotal()});
self.ventas().push(venta);
for (var i = 0; i < self.productos_venta().length; i++) {
venta= new Venta({id_cita: id_cita,producto: self.productos_venta()[i].producto(),
cantidad: self.productos_venta()[i].cantidad(),subtotal: self.productos_venta()[i].subtotal()});
self.ventas().push(venta);
}
var token = $("#token").val();
var ruta = "sale.store"
$.ajax({
route: ruta,
headers: {'X-CSRF-TOKEN': token},
type: 'POST',
data: {ventas: self.ventas()},
dataType: 'JSON',
error: function(respuesta) {alert("error");},
success: function(respuesta) {
if (respuesta) {
alert("exito");
}else {
alert("error");
}
}
});
}
}
<?php
//in route
Route::post('sales/AddItem','SalesController@AddItem');
?>
<script>
$.ajax({
url: 'sales/AddItem',
headers: {'X-CSRF-TOKEN': token},
type: 'POST',
data: {ventas: self.ventas()},
dataType: 'JSON',
error: function(respuesta) {alert("error");},
success: function(respuesta) {
if (respuesta) {
alert("exito");
}else {
alert("error");
}
}
});
</script>
如果能在路由前面加上complete url就更好了
大家好,我是这个社区的新成员。我正在使用 Laravel 5.1 开发 Web 应用程序,我想从 ajax POST 请求调用我的模型 Sale
的方法存储,但我从控制台获得了这个:
MethodNotAllowedHttpException in RouteCollection.php line 218
会是什么?非常感谢。
这些是我的路线:
//Rutas para inicios de sesión
Route::resource('log', 'LogController');
Route::get('logout','LogController@logout');
//Rutas generales
Route::get('/', 'WelcomeController@index');
Route::get('index', 'WelcomeController@indexdos');
//Routes for users
Route::get('user/actualizar','UserController@actualizar');
Route::get('user/deleter','UserController@deleter');
Route::resource('user', 'UserController');
//Routes for pacients
Route::get('pacient/deleter','PacientController@deleter');
Route::get('pacient/actualizar','PacientController@actualizar');
Route::resource('pacient', 'PacientController');
//Routes for medicaments
Route::get('medicament/deleter','MedicamentController@deleter');
Route::get('medicament/actualizar','MedicamentController@actualizar');
Route::resource('medicament', 'MedicamentController');
//Routes for doctors
Route::get('doctor/deleter','DoctorController@deleter');
Route::get('doctor/actualizar','DoctorController@actualizar');
Route::resource('doctor', 'DoctorController');
//Routes for dates
Route::get('date/deleter','DateController@deleter');
Route::get('date/actualizar','DateController@actualizar');
Route::get('date/bitacora','DateController@bitacora');
Route::resource('date', 'DateController');
//Routes for sales
Route::resource('sale', 'SalesController');`
这是包含我要发送给 sale.store
@extends('layouts.principal')
@include('Ventas.forms.barra')
@section('content')
<div class="container">
{!!Form::open()!!}
<input type="hidden" name="_token" value="{{ csrf_token()}}" id="token"></input>
@include('Ventas.forms.sale')
<button id="btnAgregar" data-bind="click: $root.agregarVenta" class="btn btn-success">Registrar venta</button>
{!!Form::close()!!}
</div>
@stop
如您所见,我包含了 'sale' 表单,其中包含了 knockout js 代码:
<div class="form-group">
<table>
<tr>
<td>{!!Form::label('id_doctor_1','Cita a la cual se facturará: ')!!}</td>
<td><select data-bind="options: $root.citas, optionsText: function(item) {
return item.paciente() + ' (Fecha: ' + item.fecha() + ' , Hora: ' +item.hora() + ')'
},
value: selectedDate,
optionsCaption: 'Elija una cita...'"></select></td>
</tr>
<tr>
<td>{!!Form::label('Producto:')!!}</td>
<td><select data-bind="options: $root.productos, optionsText: function(item) {
return item.nombre() + ' (Precio de venta: ' + item.precio_venta() + ' ,Existencias: ' +item.existencias() + ')'
},
value: selectedProduct,
optionsCaption: 'Elija un producto...'"> </select></td>
<tr>
<td>{!!Form::label('cantidad:')!!}</td>
<td><input type="number" data-bind="value: cantidad"></input></td>
</tr>
</table>
</div>
<div class="form-group">
<label for="btnAgregar" class="col-sm-2 control-label"></label>
<div class="col-sm-10">
<button id="btnAgregar" data-bind="click: $root.agregarProducto_venta" class="btn btn-primary col-sm-8 col-md-offset-1">Agregar producto a la venta actual</button>
</div>
</div>
<div class="form-group">
<br><br/><br><br/>
</div>
<div data-bind="visible: selectedDate"> <!-- Appears when you select something -->
<div class="post format-image box masonry-brick">
<!-- Begin Blog Grid -->
<div class="blog-wrap">
<table>
<tr>
<td><strong>Detalles de cita elegida</strong></td>
</tr>
<tr>
<td><strong>Paciente:</strong></td>
<td><span data-bind="text: selectedDate() ? selectedDate().paciente : 'unknown'"></span></td>
</tr>
<tr>
<td><strong>Producto:</strong></td>
<td><span data-bind="text: selectedDate() ? selectedDate().producto : 'unknown'"></span></td>
</tr>
<tr>
<td><strong>Cantidad:</strong></td>
<td><span data-bind="text: selectedDate() ? selectedDate().cantidad : 'unknown'"></span></td>
</tr>
<tr>
<td><strong>Subtotal:</strong></td>
<td><span data-bind="text: selectedDate() ? selectedDate().subtotal : 'unknown'"></span></td>
</tr>
<tr>
<td><br><br></td>
</tr>
<tr>
<td><strong>Productos a facturar</strong></td>
</tr>
<tr>
<td colspan="2"></td>
</tr>
</table>
<table>
<thead>
<tr><th>Nombre del producto____|</th><th>Precio____|</th><th>Cantidad____|</th><th>Subtotal____|</th><th>Acción____|</th></tr>
</thead>
<tbody data-bind="foreach: productos_venta">
<tr>
<td data-bind="text: producto"></td>
<td data-bind="text: precio"></td>
<td data-bind="text: cantidad"></td>
<td data-bind="text: subtotal"></td>
<td><a href="#" data-bind="click: $root.removeProduct">Remover</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h3 style="color:#FAFAFA" data-bind="visible: totalSurcharge() > 0">
Total (incluyendo medicamentos y cita): $<span data-bind="text: totalSurcharge().toFixed(2)"></span>
</h3>
最后这是我的 app.js
文件,应该是当我单击按钮 btnAgregar
时,方法 agregarVenta
发出 ajax 请求类型 POST,但它不起作用,我做错了什么?再次感谢。
文件app.js
(ajax方法):
//Método para agregar una nueva venta al arreglo de ventas, y después pasarlo
//a la base de datos.
self.agregarVenta=function(){
// crea un nuevo objeto Venta y después lo añade al arreglo.
var id_cita = self.selectedDate().id();
var venta= new Venta({id_cita: id_cita,producto: self.selectedDate().producto(),
cantidad: self.selectedDate().cantidad(),subtotal: self.selectedDate().subtotal()});
self.ventas().push(venta);
for (var i = 0; i < self.productos_venta().length; i++) {
venta= new Venta({id_cita: id_cita,producto: self.productos_venta()[i].producto(),
cantidad: self.productos_venta()[i].cantidad(),subtotal: self.productos_venta()[i].subtotal()});
self.ventas().push(venta);
}
var token = $("#token").val();
var ruta = "sale.store"
$.ajax({
route: ruta,
headers: {'X-CSRF-TOKEN': token},
type: 'POST',
data: {ventas: self.ventas()},
dataType: 'JSON',
error: function(respuesta) {alert("error");},
success: function(respuesta) {
if (respuesta) {
alert("exito");
}else {
alert("error");
}
}
});
}
}
<?php
//in route
Route::post('sales/AddItem','SalesController@AddItem');
?>
<script>
$.ajax({
url: 'sales/AddItem',
headers: {'X-CSRF-TOKEN': token},
type: 'POST',
data: {ventas: self.ventas()},
dataType: 'JSON',
error: function(respuesta) {alert("error");},
success: function(respuesta) {
if (respuesta) {
alert("exito");
}else {
alert("error");
}
}
});
</script>
如果能在路由前面加上complete url就更好了