不允许 Laravel 和 Ajax 更新
Posted
技术标签:
【中文标题】不允许 Laravel 和 Ajax 更新【英文标题】:Laravel and Ajax update not allowed 【发布时间】:2018-08-13 03:57:09 【问题描述】:我正在使用 Ajax 请求在 Laravel 中处理 CRUD,它工作得很好,直到我偶然发现更新模型时出错。 单击编辑按钮时,模态窗口会加载员工的所有数据,当我编辑任何内容时,Ajax 会抛出一个错误,指出其中两个字段被请求,即使它们已被填充。
这是控制台中抛出的错误:
"readyState": 4,
"responseText": "\"email\":[\"The email field is requested.\"],\"fullname\":[\"The fullname field is requested.\"]",
"responseJSON":
"email": [
"The email field is requested."
],
"fullname": [
"The fullname field is requested."
]
,
"status": 422,
"statusText": "Unprocessable Entity"
这是 Ajax 函数:
/* Edit employee */
$(document).on('click', '#btn-edit', function(e)
e.preventDefault();
var id = $(this).attr('data-id');
$.ajax(
type: 'put',
url: link + id,
processData: false,
contentType: false,
// data: new FormData($("#form-employee")[0]),
data: $("#form-employee").serializeArray(),
success: function()
$('#btn-update').click();
$('#employeeModal').modal('hide');
swal(i18n.buttons.updated_msg, i18n.employees.updated_alert, "success");
,
error: function(data)
var errors = data.responseJSON;
$('.form-group').removeClass('has-error');
$('.alert ul').empty();
$('.alert').show();
$.each(errors, function(key, value)
$('.alert ul').append('<li>' + value + '</li>');
$('#' + key).parent('.form-group').addClass('has-error');
);
console.log(data);
);
);
还有 Laravel 验证:
public function rules()
return [
'email' => 'required|email|unique:employees,email,' . $this->employee,
'fullname' => 'required|string|min:4|max:255',
'password' => 'nullable|min:6',
'phone_number' => 'nullable|numeric|digits_between:0,50',
'profile_picture' => 'nullable|image',
];
【问题讨论】:
【参考方案1】:我认为我对这些类型的表单和 PUT 请求有疑问,我猜您也在表单中上传文件?
我建议尝试使用 POST 来查看它是否有效(路线也需要更新)。
除此之外,查看 ajax 请求中发送的数据会很有帮助。
【讨论】:
表格正在准备上传文件,是的。那是问题吗?在 ajax 请求中,我没有发送任何新内容。例如;我单击编辑员工按钮,所有数据都加载到表单中,然后单击保存而不进行任何更改,即使我发送数据库中已有的相同值,它也会抛出“所需字段”错误 文件上传部分没有问题,但我猜请求类型是,所以我将put
与post
交换,并在您的路由文件中使用相同的,看看是否工作。
我的路由正在使用 Laravel 资源:Route::resource('employees', 'EmployeeController');
我应该删除它吗?
我认为您实际上可能必须这样做,更新模型的默认值是put
,但(我相信)您需要使用post
,所以类似Route::post('employees/id', 'EmployeesController@update');
并列出您的其他也可以手动为该模型的 crud 操作路由。
我不知道为什么说实话,我认为如果方法是 PUT,它可能归结为 multipart/form-data 在 php://input 中不可见。您也许可以使用 <input type="hidden" name="_method" value="put">
之类的隐藏输入来实现相同的目的。【参考方案2】:
您确定您的输入与后端定义的名称相同吗?
【讨论】:
是的,他们有。以上是关于不允许 Laravel 和 Ajax 更新的主要内容,如果未能解决你的问题,请参考以下文章
405 方法不允许,PATCH 不工作。 Laravel、Ajax、Jquery、引导模式
JavaScript 表单使用 Ajax 和 Laravel 路由提交到数据库