Laravel формы выберите значение onChange сохранить в базе данных через AJAX - PullRequest
0 голосов
/ 05 июня 2018

У меня есть выпадающий список, сгенерированный следующим кодом в контроллере (FocalController.php):

  $focalData = DB::table('role_users')->orderBy('users.id','DESC')
            ->leftJoin('users', function($join){
                $join->on('role_users.user_id', '=', 'users.id');
                $join->on('role_users.role_id', '=', DB::raw("'1'"));
            })
            ->select('users.id',DB::raw('CONCAT(users.name) AS focal'))
            ->groupBy('users.id')
        ->get();

    foreach($focalData as $data):
        $focals[$data->id] = $data->focal;
    endforeach;

в представлении, у меня есть следующий блок, генерирующий выпадающий список:

{!! Form::select('focal', [''=>'select focal']+ collect($focals)->toArray() , $project_focal, array('class' => 'form-control','onchange'=>'changeFocal(this, '.$project->id.')' ))!!}

enter image description here

Я хочу отправить раскрывающееся значение onChange и сохранить его с помощью AJAX.

Мой Ajax для отправки формы:следующее:

    function changeFocal(e,project_id) {

        var focal_id = $("#e").val();
        var project_id = $("#project_id").val();

        $.ajax({
            type: "PUT",
            data: "focal_id=" + e + "&project_id=" + project_id,
            url:  "{{ URL::to('admin/focal') }}",
            success:function(data){
                console.log(data);$("#msg").html("New Focal Assigned.");
            }
        });
    }

Мой маршрут:

Route::post('admin/focal/','FocalController@saveFocal');

Функция saveFocal в моем FocalController:

public function saveFocal(Request $request){
        $focal_id = $request->focal_id;
        $project_id = $request->project_id;    
        $project = Project::find('idea_id', $project_id)
                    ->update([
                        'focal' => $focal_id,
                        'updated_at' => \Carbon\Carbon::now()->toDateTimeString(),
                    ]);
        @\App\Common::createAccessLog($project->focal, "Update Project Focal for Project#" . $project->idea_id . "(" . $project->name . ")");
        return view('admin/focal');
    }

Я получаю следующееошибка в консоли: enter image description here

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

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Ude where Предложение вместо find

  Project::where(

find работает с первичным ключом

0 голосов
/ 05 июня 2018

Используйте POST вместо PUT

Также убедитесь, что маршрут, на который вы отправляете запрос, действителен и существует

Ниже приведено несколько исправлений:

function changeFocal(e,project_id) {

    var focal_id = $(e).val(); //correction
    var project_id = $("#project_id").val();

    $.ajax({
        type: "PUT",
        data: "focal_id=" + focal_id + "&project_id=" + project_id, //correction
        url:  "{{ URL::to('admin/focal') }}",
        success:function(data){
            console.log(data);$("#msg").html("New Focal Assigned.");
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...