laravel ajax请求params产生null

时间:2017-07-05 14:03:31

标签: php ajax laravel

我是laravel框架的新手,并开始关注laravel任务教程。 我试图通过ajax请求传递任务的名称,以便将其保存在数据库中。

前端:

html2canvas($('#first-page'), {
    onrendered: function(canvas) {
        firstPage = canvas.toDataURL('image/jpeg', 0.5);
    },
    background: '#ffffff'
});

服务器端:

var taskdata= {
    "name": $("#new_task").val()
};

//console.log(JSON.stringify(taskdata));

$.ajax({
    url: '/task',
    type: 'POST',
    data: taskdata,
    contentType: 'json',
    processData: false,
    success: function(result) {
        alert("success");
    }
});

2 个答案:

答案 0 :(得分:1)

这是解决这个问题的更好方法:

Route::post('/task', function (Request $request) {
    $validator = Validator::make($request->all(), [
        'name' => 'required|max:255',
    ]);
    if ($validator->fails()) {
          throw new ValidationException($validator); //Your error handler should send JSON or redirect as appropriate.
    }

    $task = new \App\Task; 
    $task->name = $request->name;
    $task->save();

    if ($request->expectsJson()) {
        return response()->json(true); //Success
    } else {
        return redirect()->to("/");
    }
});

更新

您还需要让jQuery处理数据,以便构建正确的查询:

var taskdata= {"name": $("#new_task").val()};
        //console.log(JSON.stringify(taskdata));
        $.ajax({
            url: '/task',
            type: 'POST',
            data: taskdata,
            contentType: 'json',
            processData: true, //Or remove it completely since the default is true
            success: function(result) {
                alert("success");
            }
        });

答案 1 :(得分:1)

  

在AJAX请求期间使用validate方法时,Laravel不会生成重定向响应。相反,Laravel会生成包含所有验证错误的JSON响应。此JSON响应将使用422 HTTP状态代码发送。

因此您可以将控制器方法更改为

Route::post('/task', function (Request $request) {

    $validator = Validator::make($request->all(), [
        'name' => 'required|max:255',
    ]);

    if ($validator->fails()) {
        return $validator->errors()->all();
    }

    $task = new \App\Task; 
    $task->name = $request->name;
    $task->save();

    return url("/");
});

和你的ajax方法

var taskdata= {
    "name": $("#new_task").val(),
    "_token" : "{{ csrf_token() }}"
};

$.ajax({
    url: '/task',
    type: 'POST',
    data: taskdata,
    contentType: 'json',
    success: function(result) {
        console.log(result); // The url
    },
    error: function (data) {
        console.log(data.responseJSON); // Here you could see the error
    }
});