У меня маленькая проблема с ajax в symfony4. Я хочу обработать функцию применения (применить к предложению) с jQuery и Ajax У меня есть эта функция в контроллере.
Процесс выполняется, как и ожидалось, я имею в виду, когда я нажимаю на кнопку (применить ) впервые соответствующее предложение будет храниться с правильными данными. и если это не первый раз, он не будет сохранен (это правильно).
/**
* it allows any user to Apply for an offer and create a new applyOffre object in the applyOffre table
* @Route("candidat/offre/{id}/apply", name="offre_apply")
* @param OffreEmploi $offre
* @param EntityManagerInterface $manager
* @param ApplyOffreRepository $applied
* @param Request $request
* @return Response
*/
public function apply(OffreEmploi $offre, EntityManagerInterface $manager, Request $request, ApplyOffreRepository $applied)
{
$user = $this->getUser();
$apply = new ApplyOffre();
$appliedOffre = $applied->findAll();
$exist = false;
$temps = array();
$idx = 0;
if($appliedOffre and !$exist) {
foreach ($appliedOffre as $applie) {
if ($applie->getOffre() ==$offre and $applie->getCandidat() ==$user) {
$exist = true;
// $this->addFlash('warning', ' you've already applied for this job ');
}
}
}
if(!$exist)
{
$apply->setOffre($offre)
->setCandidat($user);
$manager->persist($apply);
$manager->flush();
$temps[$idx++]=array(
'$offre'=>$offre,
'$user'=>$user
);
// $this->addFlash('success',' it's done a new apply registered ');
}
return new JsonResponse($temps,200);
}
, но все проблемы связаны с оповещениями. Если задание применяется впервые, появляется предупреждение "Postulé" появится, и если это не предупреждение "Deja postulé" должно появиться. На данный момент у меня есть только предупреждение "postulé", которое появляется, когда предложение применяется во второй раз (даже если метод в контроллере выполняется правильно) , Это Ajax / jQuery, относящийся к этой функции:
$("a.js-apply").on("click", function(event){
event.preventDefault();
var url=this.href;
var b=this.id;
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
async: true,
success: function (data, status) {
if (data) {
$(this).slideToggle('fast', function () {
$('a#' + b).text('Postulé');
alert('postulé');
});
}
else{
alert('deja postulé');
}
// alert(data);
},
error: function (xhr, textStatus, errorThrown) {
alert('Ajax request failed.');
}
});
});