Ich habe einen "wie" -Link auf meiner Seite. Der Benutzer kann klicken, um ein altes ähnliches zu mögen oder zu entfernen. Um das erneute Laden der Seite zu vermeiden, verwendete ich natürlich eine Ajax-Methode. Bitte beachten Sie, dies ist mein erstes Mal mit Ajax. Es funktioniert beim ersten Klick auf den Link, aber nicht, wenn Sie ein zweites Mal klicken. Beim zweiten Mal wird die Seite neu geladen.Seite neu laden mit Ajax beim zweiten Klick
Ich verstehe nicht warum. Irgendwelche Hilfe bitte?
Hinweis: Ich arbeite mit Symfony2.
mein Zweig und jquery Skript:
<a href="" class="buttonLike{{ article.id }}" style="text-decoration: none" title="{% if like == 'true' %}Retirer des coups de coeur{% else %}Votez pour ce contenu{% endif %}" data-toggle="tooltip" data-placement="top"><i class="fa fa-heart {% if like == 'true' %}text-default{% endif %}"></i> {{ article.usersLike|length }}</a>
<!-- Ajax sur les boutons Like et Favoris -->
<script type="text/javascript" src="{{ asset('assets/plugins/jquery.min.js') }}"></script>
{% if article.isPublic %}
<script>
$("a.buttonLike{{ article.id }}").click(function (e) {
e.preventDefault();
var buttonLike = $('a.buttonLike{{ article.id }}');
$.ajax({
url: '{{ path('article_like', {'id': article.id}) }}',
type: 'GET',
dataType: 'json',
success: function (data, statut) {
console.log(data);
if (data.bool == true) {
buttonLike.replaceWith("<a href='' class='buttonLike{{ article.id }}' style='text-decoration: none' title='Votez pour ce contenu' data-toggle='tooltip' data-placement='top'><i class='fa fa-heart'></i>" + data.count + "</a>");
} else {
buttonLike.replaceWith("<a href='' class='buttonLike{{ article.id }}' style='text-decoration: none' title='Retirer des coups de coeur' data-toggle='tooltip' data-placement='top'><i class='fa fa-heart text-default'></i>" + data.count + "</a>");
}
},
error: function (resultat, statut, erreur) {
alert("Une erreur s'est produite.");
}
});
});
</script>
{% endif %}
mein Controller:
/**
* Add or delete a like
* @Security("has_role('ROLE_USER')")
* @Route("/{id}/likes", name="article_like")
* @Method("GET")
*/
public function likesAction(Article $article) {
if ($article->getIsPublic()) {
$user = $this->container->get('security.token_storage')->getToken()->getUser();
$usersLikes = $article->getUsersLike();
$countLikes = count($usersLikes);
$bool = false;
if ($countLikes != null) {
foreach ($usersLikes as $userlike) {
if ($user == $userlike) {
$em = $this->getDoctrine()->getManager();
$article->removeUsersLike($user);
$user->removeLike($article);
$em->flush();
$countLikes = $countLikes - 1;
$bool = true;
}
}
}
if ($bool == false) {
$em = $this->getDoctrine()->getManager();
$article->addUsersLike($user);
$user->addLike($article);
$em->flush();
$countLikes = $countLikes + 1;
}
$response = new JsonResponse();
return $response->setData(array('count' => $countLikes, 'user' => $user->getId(), 'userslikes' => $usersLikes, 'bool' => $bool));
} else {
throw $this->createAccessDeniedException();
}
}
Danke. Leider funktioniert es immer noch nicht ... :(In Anbetracht dessen, was du sagst, vielleicht sollte ich versuchen, das Attribut zu ändern, aber nicht das gesamte "a" -Tag ... – Melody
Ja, der beste Weg ist, nur das zu ändern Informationen, die Sie ändern möchten, nicht die gesamte Schaltfläche (DOM-Element). buttonLike.attr ('title', '...'). html ('' + data.count); –
Vielen Dank :) – Melody