Tout ce dont j'ai besoin, c'est une méthode qui retourne true si l'URL répond. Malheureusement, je suis nouveau à JQuery et je fais mes tentatives d'écriture de cette méthode plutôt frustrante.
J'ai vu plusieurs exemples de jQuery en utilisant .ajax, mais le code me manque toujours. Qu'est-ce qui ne va pas? P>
var urlExists = function(url){ //When I call the function, code is still executing here. $.ajax({ type: 'HEAD', url: url, success: function() { return true; }, error: function() { return false; } }); //But not here... }
6 Réponses :
transmettez-le un rappel, ou le rendez synchrone (non recommandé, car il verrouille le navigateur). p> alors vous pouvez faire p> il convient également de mentionner le Même stratégie d'origine . p> aussi, revenant d'une fonction de fonction anonyme ne retournera pas dans la fonction mère (comme dans votre exemple d'origine). Cela revient simplement cette fonction intérieure. Pour revenir d'un parent intérieur à un parent, définissez un drapeau et renvoyez-le. P> p> Les URLUXISTES () CODE> ne peuvent pas retourner car il a besoin d'attendre la demande.
Le retour de T / F ne devrait pas être un problème, et si c'était, je perdrais tout le point du code de toute façon ...
pourrait utiliser une demande synchrone, tho
@ user205376 Ouais, si cela ne vous dérange pas que le navigateur de votre utilisateur soit verrouillé.
@ user474632 retour à partir d'une fonction interne ne fait pas le retour parent.
Si l'URL provient du même domaine que votre page, vous pouvez le faire. Mais si c'est à partir d'un domaine différent, par exemple Google.com, il échouera en raison de la sécurité croisée du domaine. P>
Ce n'est pas comment Ajax fonctionne. Ajax est fondamentalement asynchrone (c'est en fait ce que le premier «A» signifie), ce qui signifie plutôt que vous appelez une fonction et renvoie une valeur, vous appelez une fonction et transmettez-le dans un rappel et que le rappel sera appelé à la valeur. .
(voir http://en.wikipedia.org/wiki/continuation_passing_style .) P>
Que voulez-vous faire après que vous sachiez si l'URL répond ou non? Si vous aviez l'intention d'utiliser cette méthode comme celle-ci: p> alors ce que vous devez faire est: p> où Urluxist () Code> est: P> function urlExists(url, callback){
$.ajax({
type: 'HEAD',
url: url,
success: function(){
callback(true);
},
error: function() {
callback(false);
}
});
}
Je ne sais pas si vous manquez le point ou je suis ... tout ce que je veux en ce moment est une valeur booléenne.
Mise à jour de ma réponse pour vous donner une valeur booléenne, cela aide-t-elle?
J'aime cette réponse.
En général, vous devez probablement exécuter votre script dans Firefox à l'aide du plug-in Firebug. Cela vous donnera les détails nécessaires pour résoudre le problème. P>
Les méthodes AJAX et post sont asynchrones. Vous devez donc gérer le résultat dans une méthode de rappel. P>
Fondamentalement, il n'y a rien de mal avec votre code. Voir ça marche ici: http://jsfiddle.net/pk76x/ p>
Je suppose que vous l'utilisez pour vérifier la disponibilité du contenu sur un domaine différent, ce qui échoue, car les navigateurs ne permettent pas à Cross Domain Ajax-Demandes. P>
Drôle, ça. J'ai réussi à le faire correctement sauf pour un détail important. Maintenant, je devrai penser à une méthode différente de mon site de trouver la bonne adresse ..
Il existe en fait une différence fondamentale entre le code de votre Jsfiddle et son code: votre code sera, sur le succès ou l'erreur, faites quelque chose (alerte, dans ce cas). Son code tente de retourner une valeur de la fonction d'origine, qui ne fonctionnera pas car la fonction d'origine est déjà terminée au moment où les fonctions de réussite ou d'erreur sont appelées. Ces déclarations de retour ne sont pas de retour d'origine (), elles reviennent des fonctions de réussite et d'erreur.
Ajax est essentiellement asynchrone, et c'est pourquoi le comportement que vous décrivez.
J'ai utilisé ce qui suit, qui est exempt d'origine transversale, pour obtenir une simple indication true / fiforme si une URL est valide, de manière synchrone: L'utilisation est alors triviale: p> espère que cela aide p> p>
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses uniquement uniquement peuvent devenir invalides si la page liée change.
Désolé Ohad, mais votre fonction reviendra immédiatement avant de tirer le succès ou de l'erreur, car l'appel à Ajax est asynchronisé. Ainsi, la méthode renvoie ISVALID = FALSE immédiatement après avoir appelé Ajax (), à chaque fois. avoir pour tomber voter celui-ci. Pardon.
@ Jj_coder4hire, avez-vous essayé? Checkout l'appel Ajax. Il indique: "async: faux"