2010-05-13 5 views
1

Je suis en utilisant le code suivant:Retard de l'affichage de l'image chargée à l'aide jquery + ajax

$.ajax({ 
     url: "pgiproxy.php", 
     data: ({ data : $("#formdata").serialize(), mode : "graph"}), 
     success: 
      function(result){ 
       var temp = $('<div/>').html(result); 
       var val = temp.find('center').html(); 
       $('#BFX').html(val); 
      }, 
     error: 
      function(){ 
       $("#error").html("ERROR !!!"); 
      } 
    }); 

Le « résultat » de l'appel ajax à « pgiproxy.php » est une page Web entière (retour en string), il est ensuite converti en objet jQuery et stocké dans 'var'. J'extrais ensuite les données dont j'ai besoin (une image .gif) en utilisant .find() qui est stocké dans 'val'. Cette image est ensuite insérée dans un div #BFX pour l'affichage.

Mon problème est chaque fois que je clique sur mon bouton pour mettre à jour cette image, il montre le chargement de l'image de haut en bas, comme il lit à partir du web. Est-il possible de n'afficher cette image qu'une fois qu'elle est complètement chargée de sorte que l'utilisateur ne voit pas le chargement de l'image et ne voit que l'image changer instantanément.

+1

Ce n'est pas la réponse à votre question mais avez-vous regardé .load()? son raccourci pour ce que vous essayez de faire ci-dessus. : $ ('# result'). load ('ajax/test.html #container'); Plus d'infos ici: http://api.jquery.com/load/ En ce qui concerne votre question, avez-vous essayé d'insérer l'image via ajax et de l'insérer ensuite? (Je veux dire un autre appel ajax à l'URL de l'image après avoir obtenu l'URL du balisage retourné par votre premier appel) HTH – DannyLane

+0

salut danny, merci pour la réponse, j'ai essayé d'utiliser .load() mais avec les mêmes résultats, je vois encore toutes les données retournées étant affichées pendant le chargement. – niczoom

Répondre

2

utilisation .load() charge événement sur <img>

cacher l'image d'abord montrer puis quand la charge complète ...

quick demo voir codes

+0

merci pour la réponse, j'aime les démos et aussi 'JS Bin', je n'ai jamais vu avant, j'aime les options de code/aperçu. J'aime l'idée de se cacher puis montrer en charge complète. Ayez quelques idées pour garder l'image originale affichée, puis montrez la nouvelle image une fois la charge terminée. Merci pour votre aide, Nic. – niczoom

0

Vous pouvez tout faire manuellement: en chargeant l'image en arrière-plan, puis en l'insérant dans la page. Il y a plusieurs articles traitant le sujet dans les détails, y compris celui-ci:
http://jqueryfordesigners.com/image-loading/

+0

hi nikita, l'image est extraite des données reçues de l'appel ajax en utilisant ".find ('center'). Html();" (comme l'image est intégrée dans une balise html

), une fois que j'ai ce html données je l'ai ensuite inséré dans un Div appelé #BFX, à aucun moment l'événement $ (img) .load() a été renvoyé .. – niczoom

Questions connexes