Laravel: срок действия страницы истек при отправке формы при использовании ajax - PullRequest
0 голосов
/ 26 июня 2018

Я новичок в Laravel и застрял в упомянутой проблеме в течение последних трех дней. Я гуглил его, но мне удалось найти какое-либо решение.

Я создал форму в Laravel и, потеряв фокус ввода кода Grower, извлекаю клиентов из базы данных, используя метод Ajax Get. Fetched data from database Код Ajax указан ниже:

$.ajaxSetup({
      headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      }
    });
$("#txtGrowerCode").focusout(function(){
var grower_code = $("#txtGrowerCode").val();
var grower_name = $("#txtGrowerName");
var father_name = $("#txtFatherName");
var village_name = $("#txtVillageName");
var society_name = $("#txtSocietyName");
var distt_name = $("#txtDisttName");
$.ajax({
      type : "get",
      url : "api/grower_details/"+grower_code,
      datatype : "json",
      data : $("#hidden").val(),
      success: function(options){
        obj = jQuery.parseJSON(options)
         $.each(obj, function(i,option){
          grower_name.val(option.g_name);
          father_name.val(option.g_father);
          village_name.val(option.v_name);
          society_name.val(option.so_name);
          distt_name.val(option.d_name);
        });
      }
    });
});

Задача

когда я нажимаю кнопку подтверждения, чтобы сохранить ее в другой таблице, отображается страница ошибки, в которой указывается Срок действия страницы истек из-за неактивности

То, что я пробовал до сих пор

Кажется, эта ошибка из-за защиты CSRF, поэтому

  • Я использовал скрытый ввод для хранения значения csrf.

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

  • Добавлен метатег

    <meta name="csrf-token" content="{{ csrf_token() }}">

  • Однажды я попытался исключить текущий URL из VerifyCsrfToken.php этим Я могу отправить форму успешно, но она делает недействительным login-session или уничтожает мои переменные сессии.

  • Я удалил свой код Ajax, т.е. не получил данные клиентов из базы данных (я заполнил все поля вручную), а затем попытался отправить Форма по этим данным была успешно сохранена.

Коды:

Файл маршрута

// Route group soil sample collection
Route::group(['Middleware'=>['web']],function(){
        Route::GET('/soil_sample',[
        'as' => 'soil_sample',
        'uses' => 'soilSampleDetailsController@getSampleDetails',
    ]);
        Route::post('/soil_sample',[
        'uses' => 'soilSampleDetailsController@createSampleDetails',
    ]);
});

Файл API

Route::group(['middleware' => ['web']],function(){
    Route::get('grower_details/{grower}',[
        'as' => 'grower_details',
        'uses' => 'soilSampleDetailsController@getGrowerDetails'
    ]);
});

Код контроллера

public function createSampleDetails(){
        $this->validate(request(),[
            'txtGrowerCode' => 'required',
            'txtGrowerName' => 'required',
            'txtFatherName' => 'required',
            'txtVillageName' => 'required',
            'txtSocietyName' => 'required',

        ],
            ['txtGrowerCode.required' => 'Grower Code is required!',
            'txtGrowerName.required' => 'Grower Name is required!',
            'txtFatherName.required' => 'Father name is required!',
            'txtVillageName.required' => 'Village Name is required!',
            'txtSocietyName.required' => 'Society Name is required']
        );


        $sampple_detail = new sample_detail;
        $sampple_detail->addSampleDetails();

        return redirect('/soil_sample');
    }
public function getGrowerDetails(Request $request){     
        if($request->ajax()){
            $data = new Grower();
            $growerDetails = $data->getGrowerDetails($request->grower);
            return json_encode($data->getGrowerDetails($request->grower));  
        }   
    }

Файл модели:

public function addSampleDetails()
    {
        $this->s_grower = request('txtGrowerCode');
        $this->crop_name = request('txtCrop');
        $this->save();
    }


public function getGrowerDetails($grower_code){
        $grower_details = self::leftJoin('society_master', 'g_soc','so_code')
            ->leftJoin('village_master','g_vill','v_code')
            ->leftjoin('district_master','district_master.d_code','society_master.so_distt_code')
            ->select('grower_master.id', 'grower_master.g_code', 'grower_master.g_name', 'grower_master.g_father','society_master.so_name', 'village_master.v_name', 'district_master.d_name')
                ->where('grower_master.g_code',$grower_code)
            ->get();
        return $grower_details;
    }

Форма тега

<form class="form-horizontal" id="frmDocCreate" method = "POST" action="{{route('soil_sample')}}">
...