Проблема добавления formData с проверкой laravel - PullRequest
0 голосов
/ 17 апреля 2020

Я получаю ошибки проверки, я пробовал ниже код

    var FD = new FormData();    
    FD.append( 'title', "my title" );
    FD.append( 'user_id', "20" );
    FD.append( 'company_id', "30" );

  $.ajax(
       {
       beforeSend: function (xhr) {
                xhr.setRequestHeader('Authorization', 'Bearer bde....');
                xhr.setRequestHeader('Accept', 'application/json');
                xhr.setRequestHeader('Content-Type', 'application/json');
                },
       url: 'http://localhost/myappname/public/api/test_team',
       data: FD,
       dataType: "JSON",
       processData: false,
       contentType: false,
       type: 'POST',
       success: function(data){
           alert(data);
       }
       });

Вот мой код контроллера

$validator = validator::make($request->all(), [
        'title'     => 'required',
        'user_id' => 'required',
        'company_id'=>'required',

    ]);

    if ($validator->fails()) {
        return response()->json([
            'status'=>'false',
            'message'=>$validator->errors(),
            'code'=>400,
            'result'=>''
        ], 400);
    }

Я получаю эту ошибку

"{"title":["The title field is required."],"user_id":["The user id field is required."],"company_id":["The company id field is required."]}"

Примечание: я хочу добавить все свои данные в formData и отправить их. Он работает правильно в форме данных POSTMAN.

1 Ответ

0 голосов
/ 17 апреля 2020

Я думаю, что проблема в том, что вы смешиваете два понятия здесь.

FormData полезно, когда вы хотите создать полезную нагрузку для вашего запроса как можно ближе к «металлу»:

Он использует тот же формат, который использовался бы формой, если бы тип кодирования был установлен на «multipart / form-data».

В то же время ваш AJAX клиент предоставляется набор опций, указывающих использовать вместо него JSON. И позвольте мне догадаться: когда вы тестируете это в Postman, полезная нагрузка выглядит следующим образом, верно?

{
  "title": "my title",
  "user_id: "20",
  "company_id": "30"
}

Это нормально с сервером, так как он также должен ожидать JSON в полезной нагрузке, к этому ('Content-Type', 'application/json') вариант заголовка. Но если вы хотите JSON, используйте простой JS объект с самого начала:

var FD = {
  title: 'my title',
  user_id: '20', // note the difference between string "20" and number 20
  company_id: '30'
};

В двух словах, выберите один формат полезной нагрузки - и придерживайтесь его.


В качестве идентификатора, при отладке этой и аналогичных проблем, вы должны рассмотреть прямое сравнение полезной нагрузки вашего браузера и полезной нагрузки почтальона, отправляемой на ваш сервер. Если вы видите различия, то что-то не так с вашей реализацией на стороне клиента.

В этом случае $. ajax фактически отправляет это:

------WebKitFormBoundaryQ7hyoAVZKN5BhF3M
Content-Disposition: form-data; name="title"

my title
------WebKitFormBoundaryQ7hyoAVZKN5BhF3M
Content-Disposition: form-data; name="user_id"

20
------WebKitFormBoundaryQ7hyoAVZKN5BhF3M
Content-Disposition: form-data; name="company_id"

30
------WebKitFormBoundaryQ7hyoAVZKN5BhF3M--

И, как вы можете видеть, это довольно далеко от правильного JSON. :)

...