【问题标题】:Ajax Post with Two Forms in Laravel在 Laravel 中使用两种形式的 Ajax Post
【发布时间】:2015-11-25 18:24:07
【问题描述】:

所以,我在 Laravel 5 中通过 ajax 发送发布请求时遇到了问题。 我在一个视图中有 2 个表单,其中一个正在进行 ajax 调用。

首先,路线:

Route::post('partidoBoostFree', 'PartidoController@boostFree');
Route::resource('partido', 'PartidoController');

这是在视图中进行调用的表单:

<div class="col-md-4 boostPanel">

        <div class="panel-body">

            <div class="input-group">
                {!! Form::open([  'url' => 'partidoBoostFree', 'id' => 'guardaBoostFree', 'method' => 'POST' ]) !!}
                 <input type="hidden" name="_token" value="{{{ Session::getToken() }}}">


                {!! Form::hidden('id_boost_free', $partidoBoost->id, ['id' => 'id_boost_free']) !!}
                {!! Form::text('juegatela', null, ['class' => 'form-control', 'id' => 'juegatela', 'placeholder' => 'Puntos a jugar']) !!}
            </div>

            {!! Form::submit('Juégatela', ['class' => 'btn btn-primary form-control', 'id'=>'juegatelaSbmt', 'disabled' => 'disabled']) !!}
            {!! form::close() !!}

        </div>
</div>

这是 JS:

$('#juegatelaSbmt').click(function(e){
    e.preventDefault();
    e.stopPropagation();

    $.ajax({
      url: '/partidoBoostFree',
      method: 'POST',
      data: {
        'idPartido' : $('#id_boost_free').val(),
        'puntos' : $('#juegatela').val(),
        '_token': $('input[name=_token]').val()
      },
      success: function(data){
        $('.boostPanel .panel-body').html(data);
      }
    })

  });

最后是控制器:

public function boostFree(){

        if ( Request::ajax() ){

            $data = Input::all();

            if( $data[puntos] > 0 && $data[puntos] < 4 ){

                if( $this->partidoRepo->getPartido_Usuario( $data[idPartido], Auth::user() )  ){
                    $apuesta = $this->apuestaRepo->postApuestaFree( $data[idPartido], Auth::user(), $data[puntos] );

                    if($apuesta){
                        return "<div class='alert alert-info' role='alert'>
                                <p>Te la jugaste. Suerte!!!</p>
                                </div>";
                    }else{
                        flash()->error('Hubo un problema, intentalo más tarde');
                    }
                }else{
                    //Regresa mensaje de que haga la quiniela por lo menos para el partido
                }
            }else{
                //Regresa un mensaje de seleccionar el min o máximo de puntos a jugar.
            }
        }
    }

有趣的是,当我在检查器中进行 ajax 操作时,我得到了这个:

但是,如果我评论 boostFree() 函数,我会得到:

问题是,无论是 200 还是 500,我从 Laravel 得到的都是 RouteCollection.php 第 207 行中的 MethodNotAllowedHttpException 错误

我几乎尝试了所有方法,将标记放在标题中,将发布操作更改为获取(我知道这不会起作用),将 .ajax 函数中的“类型”更改为“方法”。

希望有人可以帮助我,我真的很感激。 非常感谢。

【问题讨论】:

  • 您的路线似乎配置为发布到partidoBoostFree,而您的表单正在发布到/partidoBoostFree

标签: jquery ajax laravel-5


【解决方案1】:

我相信 Laravel 给了你 MethodNotAllowed 例外,因为你试图发帖到 /partidoBoostFree 但路由设置在 partidoBoostFree 上。您应该使用 artisan 命令行工具来检查您的路线:

php artisan route:list

这将为您提供所有路线的列表,您可以验证它们是否按照您的要求设置。

我还建议为您的路线命名,这样您就可以按名称引用它们,而不必记住确切的 URL。

创建命名路由:

Route::post('/partidoBoostFree', array(
    'as'    =>    'partidoBoostFree',
    'uses'  =>    'PartidoController@boostFree'
));

引用命名路由:

{{ route('partidoBoostFree') }}

这是一个好方法,因为您可以随时更改路由的 URL,而不会破坏引用该路由的代码,只要您按名称引用它并且名称不会更改。

【讨论】:

  • Noup...它不起作用,我也更改了 ulr,尝试使用 / 和不使用它...我已经检查了路由列表,它有一个 POST 动词。我真的不知道它是什么......
  • 好吧,我使用 PostMan 验证请求,现在向我抛出一个 TokenMismatchException 错误......也许是这样,但我该如何纠正它们,假设错误出现在两种形式? ??
【解决方案2】:

设置类似的东西 url:window.location.origin+'/your-url';

更多: 访问此链接 http://sumanshresth.com.np/using-ajax-in-laravel/

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 2013-08-11
    • 2020-04-26
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    相关资源
    最近更新 更多