Laravel: метод Get 405 не разрешен при публикации данных с использованием jquery ajax api для хранения данных

#php #jquery #laravel #laravel-4

#php #jquery #laravel #laravel-4

Вопрос:

Я пытаюсь сохранить данные в базу данных с помощью jQuery ajax api в Laravel 4. * и получаю ошибку 405.

Вид

 {{Form::open(array("","id"=>"frmProcessLevel"))}}
   <input name="{{$result->id.'_'.str_replace(' ','-',$title)}}" id="processLevel">

   <h3>{{$title}} Impact rating</h3>
   <table class="table table-bordered" style="font-size: 12px">
       <thead>
           <tr>
               <th>Level</th>
               <th>Category</th>
               <th>Description</th>
           </tr>
       </thead>
       <tbody class="selectable selectable-rows">
           @foreach($impact_rating as $key => $value)
                <tr data-key="{{$key}}">
                    <td>{{$key}}</td>
                    <td>{{$impact_cat[$key]}}</td>
                    <td>{{$value}}</td>
                </tr>
           @endforeach
       </tbody>
   </table>
   {{Form::token()}}
   {{Form::submit('Save')}}
{{Form::close()}}

<script>
        //Submit the form functions
        $("#frmProcessLevel").submit(function (e) {
            e.preventDefault();
            var selectedLevel = $("#processLevel").val();
            var datastring = 'selectedLevel=' selectedLevel;
            //alert(selectedLevel);
            $.ajax({ 
            headers: {
                    'X-CSRF-Token': $('meta[name="_token"]').attr('content')
                },
                url: "/bia/create_critical_process/",
                type: "post",
                data: datastring,
                success: function (data) {
                    console.log(data);
                }
            }, "json");
        });
</script>
  

Маршруты

 Route::post('/bia/create_critical_process',array('before' => 'csrf','uses'=>'BiaController@createBiaStepThree'));
  

Контроллер

  public function createBiaStepThree(){
        $data = Input::all();
        $last_insert_bia_id = Session::get('last_insert_bia_id');
        if (Request::ajex())
        {
            Log::info(Input::all());
            $bia = new CriticalProcessStepThree();
            $bia->impact_rating_clinical = $data['selectedLevel'];
            $bia->key_process_fk = 1;
            $bia->bia_entry_fk = $last_insert_bia_id;
            $bia->save();
        }
    }
  

Передача токена:http://words.weareloring.com/development/laravel/laravel-4-csrf-tokens-when-using-jquerys-ajax

Комментарии:

1. Ваш маршрут мне кажется неправильным. Вам не хватает ключа из массива для используемого им контроллера. Должно быть 'uses'=>'BiaController@createBiaStepThree'

2. @Jeemusu Я уже добавил это, все еще не работает

3. Затем обновите свой вопрос, чтобы отразить новый код. По-прежнему не работает, я предполагаю, что вы получаете ту же ошибку 405?

4. @Jeemusu да, получаю ту же ошибку, я обновил код.

5. Хорошо, исходя из того, что я понял, я изменил маршрут на /bia/create_critical_process? и вместо 405 было 404

Ответ №1:

В вашем контроллере допущена опечатка.

Это должно быть

 if(Request::ajax()) 
  

вместо

 Request::ajex()
  

Не уверен, что это ваша единственная проблема, но это одна из них.

РЕДАКТИРОВАТЬ: также вы должны установить тип вашего запроса.

 type    :"POST",
  

Также убедитесь, что ваш маршрут настроен на прием запросов post, подобных.

 Route::post('route/what/ever/you/want', 'Controller@function');
  

Ответ №2:

Пример в AJAX.

 var formData = new FormData();
            formData.append("password", password.val());
        $.ajax({
             url: 'btn',
             method: 'post',
             processData: false,
             contentType: false,
             cache: false,
             dataType: 'json',
             data: formData,
             success: function(data){
                    var vote_now = $("#vote_now");
                    if(data.btn == 'visible'){
                        vote_now.fadeIn();

                    }
                    else {

                        vote_now.fadeOut();
                    }

                    },
                error: function(){

             }
        });