【问题标题】:Laravel XMLHttpRequest MethodNotAllowedHttpException in RouteCollection.php line 218:RouteCollection.php 第 218 行中的 Laravel XMLHttpRequest MethodNotAllowedHttpException:
【发布时间】:2016-11-22 00:20:55
【问题描述】:

我正在使用 laravel php 和 XMLHttpRequest() 上传图片,但出现以下错误

RouteCollection.php 第 218 行中的 MethodNotAllowedHttpException

以下是我处理表单提交的 javascript 代码:

 $(document).on('submit','form',function(e){
    e.preventDefault();
    $form=$(this);
    uploadImage($form);

  });

  function uploadImage($form){
  $form.find(".progress-bar").removeClass("progress-bar-success").removeClass("progress-bar-danger");
  var formdata=new FormData($form[0]);
  var request=new XMLHttpRequest();

  // progress event...

  request.upload.addEventListener('progress',function(e){

    var percent=Math.round(e.loaded/e.total * 100);
    console.log('progress: '+percent);
    $form.find('.progress-bar').width(percent+'%').html(percent+'%');

  });
  // progress completed load event

  request.upload.addEventListener('load',function(e){

    var percent=e.loaded/e.total * 100;
    console.log('load: '+percent);
    $form.find('.progress-bar').addClass('progress-bar-success').html('upload completed');

  });


  request.open('post','productImage.add');
  request.send(formdata);

  $form.on('click','.cancel',function(){

    request.abort();
    $form.find('.progress-bar').addClass('progress-bar-danger').removeClass('progress-bar-success').html('upload aborted...');

  });


}

这是我的 html 表单,其信息被发送到 php 路由

 <form role="form">
                    <label>Product Image:</label>
                    <input type="file" name="image">
                    <button type="submit" class="btn btn-info btn-sm upload">Upload</button>
                    <button type="button" class="btn btn-danger btn-sm cancel">Cancel</button>
                    <div class="progress progress-striped active">                   
                        <div class="progress-bar" style="width:0%"></div>
                    </div>

          </form>

这是我的路线文件:

Route::group(['prefix' => 'admin'], function () {

    Route::get('/', function () {

        return view('welcome');

    });

    Route::auth();

    Route::get('/home', [

        'uses'=>'HomeController@index',
        'as'=>'home'

        ]);

    Route::post('/productAdd', [

        'uses'=>'productsController@add',
        'as'=>'product.add'

    ]);

    Route::post('/productImageAdd', [

        'uses'=>'productsController@addImage',
        'as'=>'productImage.add'

    ]);

});

最后这是我的后控制器代码:

class productsController extends Controller
{
  function add(Request $request){

        $product= new product();
        $product->productName=$request["name"];
        $product->description=$request["description"];
        $product->discount=$request["discount"];

        $request->user()->products()->save($product);
        return redirect()->route('home');

    }

    function addImage(Request $request){
      print_r($request);
    }




}

【问题讨论】:

  • CSRF 保护呢?到位了吗?

标签: php laravel xmlhttprequest


【解决方案1】:

您忘记了用于 CSRF 保护的令牌。 将此隐藏字段添加到您的表单中:

<input type="hidden" name="_token" value="{{ csrf_token() }}">

这应该可以解决问题!

编辑:不要忘记将 _token 与您的请求一起发送。

【讨论】:

    猜你喜欢
    • 2017-10-12
    • 2017-03-13
    • 2016-12-26
    • 2016-10-31
    • 1970-01-01
    • 2017-01-03
    • 2016-11-21
    • 2017-01-26
    • 2017-08-09
    相关资源
    最近更新 更多