不允许 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 请求中,我没有发送任何新内容。例如;我单击编辑员工按钮,所有数据都加载到表单中,然后单击保存而不进行任何更改,即使我发送数据库中已有的相同值,它也会抛出“所需字段”错误 文件上传部分没有问题,但我猜请求类型是,所以我将putpost 交换,并在您的路由文件中使用相同的,看看是否工作。 我的路由正在使用 Laravel 资源:Route::resource('employees', 'EmployeeController'); 我应该删除它吗? 我认为您实际上可能必须这样做,更新模型的默认值是put,但(我相信)您需要使用post,所以类似Route::post('employees/id', 'EmployeesController@update'); 并列出您的其他也可以手动为该模型的 crud 操作路由。 我不知道为什么说实话,我认为如果方法是 PUT,它可能归结为 multipart/form-data 在 php://input 中不可见。您也许可以使用 &lt;input type="hidden" name="_method" value="put"&gt; 之类的隐藏输入来实现相同的目的。【参考方案2】:

您确定您的输入与后端定义的名称相同吗?

【讨论】:

是的,他们有。

以上是关于不允许 Laravel 和 Ajax 更新的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Ajax更新方法不允许405

405 方法不允许,PATCH 不工作。 Laravel、Ajax、Jquery、引导模式

JavaScript 表单使用 Ajax 和 Laravel 路由提交到数据库

AJAX 请求中不允许使用 Laravel 405 方法

当 PUT 通过 AJAX 用于 Laravel 资源时,方法不允许

Laravel 5.1 AJAX - 即使我发送 POST 请求,也不允许返回 405 GET 方法