Javascript Laravel表单select onChange值通过AJAX保存到数据库

Javascript Laravel表单select onChange值通过AJAX保存到数据库,javascript,php,jquery,ajax,laravel,Javascript,Php,Jquery,Ajax,Laravel,我在controller(FocalController.php)中有一个由以下代码生成的下拉列表: 在视图中,我有以下块生成下拉列表: {!! Form::select('focal', [''=>'select focal']+ collect($focals)->toArray() , $project_focal, array('class' => 'form-control','onchange'=>'changeFocal(this, '.$project-&

我在controller(FocalController.php)中有一个由以下代码生成的下拉列表:

在视图中,我有以下块生成下拉列表:

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

我想在更改时提交下拉值,并使用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');
my
FocalController
中的
saveFocal
功能是:

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');
    }
我在控制台中遇到以下错误:


有谁能告诉我我做错了什么,以及如何使用ajax将所选数据保存到数据库中,并附上一条成功消息。

使用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.");
        }
    });
}

Ude
where
子句改为
find

  Project::where(

find
在主键上工作

尝试使用
post
代替
put
并为csrf添加
\u令牌
,它抛出“500(内部服务器错误)”您的路由设置为
post
路由,但您的ajax方法正在提交
put
请求?另外,您上面提到的500错误是什么?我将ajax方法更正为“post”,并添加了“csrf”标记。现在ajax调用完成并显示成功消息。但是数据没有保存在数据库中!我将ajax方法更正为“post”,并添加了“csrf”标记。现在ajax调用完成并显示成功消息。但是数据没有保存在数据库中!console.log项目id并查看它是否选择了正确的id。函数changeFocal(e,project_id){var focal_id=$(e.val();//correction var project_id=$(“#project_id”).val();console.log(project_id)表示“未定义”。因此项目id没有到达ajax调用?是的,您需要找到在请求中传递项目id的正确方法
  Project::where(