Я пытаюсь изменить картину, когда отправляю ajax в случае успеха, изменяя src тега img. Однако я получаю эту ошибку:
GET http://localhost:8000/%7B%7B%20asset('/uploads/images/$%7Bdata.picSource%7D')%7D%7D 404 (Not Found)
Я также получаю ошибки при создании новых кнопок с помощью jQuery, который имеет ветку path в своих атрибутах href. Я читал статьи о том, как поместить часть веточки в такие кавычки: "", но я использую эти: "и внутри них" ", чтобы свободно помещать переменные в path, чтобы сделать его динамическим.
Это мой запрос ajax:
$(".uploadPic").on('submit', function(event){
event.preventDefault();
event.stopPropagation();
$.ajax({
type: "post",
url: "/upload",
data: new FormData($(".uploadPic")[0]),
processData: false,
contentType: false,
success: function (data) {
let newSource = `"{{ asset('/uploads/images/${data.picSource}')}}"`;
$("#userPic").attr('src', newSource);
},
error: function (response) {
console.info(response);
}
});
});
Ответ на вкладке сети нормальный (имя и расширение изображения): {"picSource": "8bcfb2d2a1117cbb452f632829a5cad8.jpeg"}, но я получаю ошибку при передаче нового атрибута. Часть от контроллера при успешном запросе ajax:
if (isset($request->request)) {
$file = $request->files->get('user_pic_type')['userPic'];
$file = $user->getUserPic();
$fileName = $this->generateUniqueFileName() . '.' . $file->guessExtension();
$file->move(
$this->getParameter('users_directory'),
$fileName
);
$user->setUserPic($fileName);
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
return new JsonResponse(array('picSource' => $fileName));
}
Что я могу сделать, чтобы исправить эту проблему?






Вы перепутали JS (который работает в вашем браузере) и PHP (который работает на вашем сервере и передает обработанный HTML в браузер). Если вы хотите сгенерировать такое правило ресурса во внешнем интерфейсе, вы должны либо запустить для него вызов AJAX, либо сгенерировать URL вручную.
Но поскольку вы уже используете вызов AJAX, вы должны использовать его для возврата пути к изображению. Добавьте такой код в свой PHP-контроллер:
/** @var \Symfony\Component\Asset\Packages $manager */
$manager = $this->get('assets.packages');
$imagePath = $manager->getUrl('/uploads/images/' . $fileName);
return new JsonResponse(array('picSource' => $fileName, 'imagePath' => $imagePath));
Теперь серверная часть уже генерирует для вас все необходимые данные и отправляет их в браузер.