У меня есть вызов ajax, где на кнопке отправки щелкните вызов ajax, который инициирует
<form id = "editPet" method = "patch" enctype = "multipart/form-data">
inputs...
<button id = "updatePet" data-id = "{{ $pet->uuid }}" data-token = "{{ csrf_token() }}" type = "button">SAVE</button>
</form>
Вызов Ajax:
$('#updatePet').click(function(e) {
e.preventDefault();
let petId = $(this).data("id");
$.ajaxSetup({ headers: {'X-CSRF-TOKEN': $('meta[name = "csrf-token"]').attr('content')}});
$.ajax({
url: "/my/pet/update/" + petId,
type: "patch",
data: new FormData($("#editPet")[0]),
cache: false,
contentType: false,
processData: false,
success: function(response) {
// Do something
},
error: function(error) {
// Do something
}
});
});
На стороне сервера я получаю запрос с dd($request->all()), который является пустым массивом.
Что мне здесь не хватает?
Нет, мы не можем добавить $("#editPet").val() в php, его синтаксис jquery. Если я правильно понял
не в php в вашем запросе ajax.
Установите флажок «Сохранить журнал» в инструментах разработчика и просмотрите полезные данные запроса. Тогда вы узнаете, на какой это стороне ...
@guradio $("#editPet").val() пуст.
Журнал @bigless preserve отсутствует.
Проверьте вкладку «Сеть» в инструментах разработчика. По крайней мере, в Chrome есть.
@guradio new FormData($("#editPet")[0]) передает FormData элемент формы, который действителен для конструктора. developer.mozilla.org/en-US/docs/Web/API/FormData/FormData
Попробуйте снять processData: false. «По умолчанию данные, переданные в параметр данных в виде объекта (технически, что угодно, кроме строки), будут обработаны и преобразованы в строку запроса, соответствующую типу содержимого по умолчанию» application / x-www-form-urlencoded ". Если вы хотите отправить DOMDocument или другие необработанные данные, установите для этого параметра значение false." Вы даете ему элемент FormData для данных. Вы хотите, чтобы он превратил это в строку запроса по запросу.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема решается удалением:
contentType: false,
processData: false,
Как отметил @Taplar в комментарии,
"By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded"
Можете ли вы добавить свою серверную часть также
$("#editPet")[0], это должно иметь значение? наверное должен быть$("#editPet").val()