2016-10-31 4 views
0

こんにちは私はこのコミュニティで新しくなりました。 - 私はLaravel 5.1でWebアプリケーションを開発する、と私は、Ajax POSTリクエストからの私のモデルSaleの方法店を呼びたいが、私は、コンソールからこれを持っている:RouteCollection.php行のMethodNotAllowedHttpException 218 Knockout jsとAjaxを使用したLaravel 5.15

MethodNotAllowedHttpException RouteCollection.phpラインで218

何ができますか?どうもありがとう。

これらは私のルートです:

//Rutas para inicios de sesión 
Route::resource('log', 'LogController'); 
Route::get('logout','[email protected]'); 

//Rutas generales 
Route::get('/', '[email protected]'); 
Route::get('index', '[email protected]'); 


//Routes for users 
Route::get('user/actualizar','[email protected]'); 
Route::get('user/deleter','[email protected]'); 
Route::resource('user', 'UserController'); 

//Routes for pacients 
Route::get('pacient/deleter','[email protected]'); 
Route::get('pacient/actualizar','[email protected]'); 
Route::resource('pacient', 'PacientController'); 

//Routes for medicaments 
Route::get('medicament/deleter','[email protected]'); 
Route::get('medicament/actualizar','[email protected]'); 
Route::resource('medicament', 'MedicamentController'); 

//Routes for doctors 
Route::get('doctor/deleter','[email protected]'); 
Route::get('doctor/actualizar','[email protected]'); 
Route::resource('doctor', 'DoctorController'); 

//Routes for dates 
Route::get('date/deleter','[email protected]'); 
Route::get('date/actualizar','[email protected]'); 
Route::get('date/bitacora','[email protected]'); 
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 

に送信する内容値が、私は「販売」フォームが含まれていることを形で、ノックアウトの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"); 
     } 
    } 
}); 
} 
} 

答えて

0
<?php 
//in route 
Route::post('sales/AddItem','[email protected]'); 
?> 

<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> 

あなたがルートの前に完全なURLを使用することができた場合、それはよりよいでしょう。

+0

私はあなたの提案に従って、私の機能を変更し、SalesControllerのAddItemメソッドを追加しましたが、今は私のエラーは "RouteCollection.phpライン161のNotFoundHttpException"です。 少なくとも今は違うミスです私の関数は次のようなものです:public function AddItem(Request $ request) { if($ request-> ajax()) { return response() - > json(["mensaje" => $ request- > all()]); } } – Issac

関連する問題