J'ai créé un ajax qui télécharge une image et la charge dans la page.
Il crée une image avec un bouton X dans le coin supérieur, j'essaie de l'obtenir, alors quand ce bouton est cliqué, je lance un autre code php supprimera l'image correcte et rechargera les images.
Je ne parviens pas à obtenir mon code ajax pour récupérer le code php et je ne sais pas pourquoi.
Tout pointé serait très utile.
J'ai découvert que les élémets créés dynamiquement ne seraient pas ramassés, j'ai donc dû changer mon code ajax en
<?php if (isset($_POST['deleteimage']) ){ echo('hello'); }?>
donc J'atteins ce point mais il ne récupère toujours pas mon code php et je ne sais pas pourquoi.
Tous les pointeurs seraient très utiles
AJAX JS:
XXX
HTML :
<?php $imagecount = 0; echo ('<div class=row sm>'); foreach ($getadvertimages as $getadvertimages_row) { echo ( '<div class="image-area" > <form id="deleteform'.$getadvertimages_row['image_id'].'" method = "POST" action ="include_advert/advert_new_gun_delete_image.php" > <img src="'. $getadvertimages_row['image_src'] . '" alt="Preview"> <button onclick = "" name="deleteimage" id="deleteimage" value="'. $getadvertimages_row['image_id'] . '" class="remove-image" style="display: inline;" >X</button> </form> </div>'); } echo ('</div>');
advert_new_gun_add_image.inc.php : p >
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <script src="include_advert/advert_js/advert_gun_load_save_images.js"></script> <div class="bgColor"> <form id="uploadForm" action="include_advert/advert_new_gun_add_image.inc.php" method="post" class="login-form" enctype="multipart/form-data"> <div id="targetLayer" class=col> </div> <div id="uploadFormLayer"> <input name="file" type="file" class="inputFile" /><br/> <div class="text-center"> <input type="submit" name="submit" value="UPLOAD" class="btn btn-common log-btn"> </div> </form>
advert_new_gun_delete_image.php :
$(document).ready(function(){ $("#uploadForm").on('submit',function(e) { e.preventDefault(); $.ajax({ url: "include_advert/advert_new_gun_add_image.inc.php", type: "POST", data: new FormData(this), contentType: false, cache: false, processData:false, success: function(data) { $("#targetLayer").html(data); }, error: function() { } }); }); }); $(document).ready(function(){ $('button.deleteimage').on('click', function(){ var image_id = parseInt($(this).parent().attr('id').replace('deleteform', '')); console.log(image_id); // You can comment out this. Used for debugging. e.preventDefault(); $.ajax({ url: "include_advert/advert_new_gun_delete_image.php", type: "POST", data: {image_id: image_id}, contentType: false, cache: false, processData:false, success: function(data) { $("#targetLayer"+image_id).html(data); // targetLayer is dynamic and is different for each record }, error: function(xhr, status, error) { alert(xhr.responseText); } }); }); });
J'attends quand je clique sur le bouton de l'image exécutera le fichier advert_new_gun_delete_image.php sans t recharger la page complète
3 Réponses :
$("body").on("click", "#deleteform button", function(e){
Avertissement: - Deprecated> Deprecated 3.0
include 'advert_new_gun_save_image_script.inc.php'; include 'advert_new_dropdown_populate/advert_new_gun_image_populate.php'; $imagecount = 0; echo ('<div class=row sm>'); foreach ($getadvertimages as $getadvertimages_row) { echo ( '<div class="image-area" > <form id="deleteform'.$getadvertimages_row['image_id'].'" method = "POST" action ="include_advert/advert_new_gun_delete_image.php" > <img src="'. $getadvertimages_row['image_src'] . '" alt="Preview"> <button type="button" name="deleteimage" value="" class="remove-image delete-button" style="display: inline;" >X</button> </form> </div>'); } echo ('</div>');
Bonjour @Ghulam, Merci pour votre réponse - J'ai fait les commentaires comme suggéré J'ai modifié ma question en montrant cela. Mais mon code va simplement dans le fichier include_advert / advert_new_gun_delete_image.php et l'ouvre dans le navigateur. C'est ce que j'essaye d'éviter. et idée pourquoi cela se produit?
Il ne touche pas le $ ('button.delete-button'). On ('click', function () {du tout
La réponse ci-dessus était presque là mais j'ai dû changer le $ ('button.delete-button'). on ('click', function () {
en $ (" body "). on (" click "," #deleteimage ", function (e) {
Et j'ai également supprimé: contentType: false, cache: false, processData: false, code >
Merci Ghulam pour le coup de pouce dans la bonne direction
$(document).ready(function(){ $("body").on("click", "#deleteimage", function(e){ var image_id = parseInt($(this).parent().attr('id').replace('deleteform', '')); console.log(image_id); // You can comment out this. Used for debugging. e.preventDefault(); $.ajax({ url: "include_advert/advert_new_gun_delete_image.php", type: "POST", data: {image_id: image_id }, success: function(data) { $('#imageareadiv').hide(); $("#targetLayer").html(data); // targetLayer is dynamic and is different for each record }, error: function(xhr, status, error) { alert(xhr.responseText); } }); }); });
convertir
id = "deleteform"
enclass = "deleteform"
, carid
utilisé pour adresser un élément unique tandis queclass
utilisé pour adresser un groupe d'éléments similaires et dans votre cas, lesimages
sont des éléments similairesEssayez d'ajouter une barre oblique (/) devant l'URL ou essayez de donner une URL complète pour déclencher un ajax
Avez-vous vérifié la console pour les erreurs? alerte quelque chose en cliquant sur le bouton, pouvez-vous voir l'alerte?
Il n'y a pas d'erreurs, c'est juste en cours d'exécution et en ouvrant advert_new_gun_delete_image.php mais je veux que cela fonctionne sans recharger la page.