Passer de la variable à la fonction AJAX de jquery succès de rappel
Je suis en train de précharger des images avec jQuery appel AJAX, mais je suis d'avoir de vrais problèmes en passant un (url) de la chaîne dans une fonction au sein de la réussite de la fonction de l'appel AJAX (si cela fait sens).
Voici mon code est:
//preloader for images on gallery pages
window.onload = function() {
setTimeout(function() {
var urls = ["./img/party/"]; //just one to get started
for ( var i = 0; i < urls.length; i++ ) {
$.ajax({
url: urls[i],
success: function(data,url) {
$(data).find("a:contains(.jpg)").each(function(url) {
new Image().src = url + $(this).attr("href");
});
}
});
};
}, 1000);
};
On peut voir mon essai (raté) à passer l'url par le biais de l' .each()
appel url
finit prend la valeur de l'augmentation de nombres entiers. Pas sûr pourquoi, ni ce qu'elles concernent, peut-être le nombre de fichiers jpg?
...de toute façon, il faut bien sûr prendre la valeur unique dans mon url tableau.
Merci pour toute aide - j'ai toujours l'impression de faire un peu d'une torsion avec ces rappels.
De PROGRESSION?
Donc, j'ai jeté un peu autour de lui, en tenant compte des commentaires de @ron tornambe et @PiSquared et je suis actuellement ici:
//preloader for images on gallery pages
window.onload = function() {
var urls = ["./img/party/","./img/wedding/","./img/wedding/tree/"];
setTimeout(function() {
for ( var i = 0; i < urls.length; i++ ) {
$.ajax({
url: urls[i],
success: function(data) {
image_link(data,i);
function image_link(data, i) {
$(data).find("a:contains(.jpg)").each(function(){
console.log(i);
new Image().src = urls[i] + $(this).attr("href");
});
}
}
});
};
}, 1000);
};
J'ai essayé de mettre le image_link(data, i)
ici, là et partout (dans chaque fonction imbriquée etc.) mais j'obtiens le même résultat: la valeur de i
n'est jamais connecté en tant que 3. Je soupçonne que c'est parce que toutes les références à i
point à la même chose, et au moment où la tâche asynchrone est image_link(data, i)
la for...
boucle est terminé (et donc a une valeur de 3). Inutile de dire que cela donne urls[i]
comme 'undefined'.
Tout (plus) conseils comment je peux contourner cela?
- Je suis confus par le deuxième argument (url) dans la réussite de la fonction. Cet argument fait référence à l'état de l'opération et que vous l'utilisez (dans le champ) que l'url?
- Ouais c'est vrai. En fait, j'ai plus confus! Merci pour ça, je ne sais pas - que vais vous expliquer pourquoi je obtenir les numéros de
url
dans le.each()
peu. - Quel est le retour de "données" ressembler. C'est de l'html? jQuery "contient" renvoie le texte des éléments, non src ou hrefs.
- J'ai eu l'idée originale et le code ici perishablepress.com/3-ways-preload-images-css-javascript-ajax - il a travaillé tous très bien ici (c'est à dire ce qui est "dans"
data
). J'ai ajouté un peu plus de complexité, je suppose et brisé. De toute façon, je viens de poster mes modifications ci-dessus ...toujours en panne. - Connaissez-vous les noms de fichiers des images que vous souhaitez charger ou êtes-vous le chargement de toutes les images stockées dans des dossiers en particulier, où les images peuvent être ajoutés et/ou supprimé?
Vous devez vous connecter pour publier un commentaire.
Depuis les paramètres de l'objet est lié à cet appel ajax, vous pouvez simplement ajouter dans l'indexeur comme une propriété personnalisée, que vous pouvez ensuite accéder à l'aide de
this
dans la réussite de rappel:Edit: en Ajoutant à une mise à jour de JSFiddle exemple, comme ils semblent l'avoir changé la façon dont leur ÉCHO des points de terminaison de travail: https://jsfiddle.net/djujx97n/26/.
De comprendre comment cela fonctionne, voir le "contexte" de terrain sur la ajaxSettings objet: http://api.jquery.com/jquery.ajax/, plus particulièrement, la présente note:
Essayer quelque chose comme cela (l'utilisation de ce.url pour obtenir l'url):
Prises de ici
Vous pouvez également utiliser indexValue attribut pour passer plusieurs paramètres via l'objet:
Vous ne pouvez pas passer des paramètres comme celle - ci, le succès de l'objet correspond à une fonction anonyme avec un seul paramètre et que les données reçues. Créer une fonction en dehors de la boucle for qui prend
(data, i)
que les paramètres et exécuter le code:Je le fais de cette façon:
Juste pour partager un problème similaire, j'avais au cas où ça pourrait aider quelqu'un, j'ai été en utilisant:
pour que la variable de la fonction de charge, Mais je devrais l'avoir utilisé:
sans
$( )
Ne sais pas pourquoi mais maintenant ça fonctionne! Merci, enfin j'ai vu ce qui n'allait pas de ce post!
J'ai rencontrer le problème récemment. Le problème vient lorsque le nom de fichier de longueur est greather de 20 caractères.
Donc, la voie de contournement est de changer votre nom de fichier de la longueur, mais le truc, c'est également un bon.
Après une enquête plus approfondie le problème vient de requête ajax:
Mettre un œil sur le code html retourné par ajax:
Comme vous pouvez le voir, le nom de fichier est découpé après le caractère de 20, de sorte que le
$(data).find("a:contains(.png))
n'est pas en mesure de trouver la bonne extension.Mais si vous vérifiez la valeur de la
href
paramètre le contenu est le nom complet du fichier.Je ne sais pas si je peux demander à l'ajax pour renvoyer le nom de fichier dans la zone de texte?
Espère être clair
J'ai trouvé le test de rassembler tous les fichiers: