J'ai une fonction contenant un appel AJAX: Je l'appelle par: p> c'est-à-dire, la regex trouve plusieurs correspondances, à laquelle j'ajoute ensuite dans le texte merci d'avance! p> p> exemple () code> dans ce contexte: p>
Exemple ([quel que soit ce qu'il correspond]) code>. Existe-t-il un moyen d'intégrer p>
.replace () code>? P>
4 Réponses :
Créez une fonction pour apporter l'appel AJAX et gérer le remplacement des correspondances sur une expression régulière. Sur la base de ce que vous avez fourni ci-dessus, c'est l'approche la plus modulaire en supposant que vous souhaitez effectuer ces types de remplaçants plus d'une fois.
function replaceTextAfterAjax(str, regex, matchSendToServer, fn) { var matches = regex.exec(str); var externUrl = matches[matchSendToServer]; $.ajax({ type: "GET", url: externUrl, contentType: "application/json; charset=utf-8", dataType: "jsonp", success: function(json) { fn(json.serverSideReplaceText, matches); }, }) } var text = "go to http://www.example.com"; replaceTextAfterAjax(text, /(go to) (.*)$/, 2, function(response, matches) { text = matches[1] + ' ' + response; // continue to use `text` });
Qu'entendez-vous par continuer à utiliser du texte code>? Lorsque j'exécute votre code,
texte code> ne change pas.
La valeur du texte code> change au-dessus de ce commentaire. Le commentaire indique lorsque vous commencerez à utiliser la nouvelle valeur pour votre application.
Oh je vois. Mais je reçois une erreur de syntaxe de http://www.iana.org/domains/example/ code>, qui est juste bizarre. Voir Jsfiddle .
Friend, je ne comprends pas votre question clairement ... Vous pouvez essayer ce code ci-dessous ... Vous n'êtes pas sûr de fonctionner ou non ...
function example(param, callback) { $.ajax({ type: "GET", url: param, contentType: "application/json; charset=utf-8", dataType: "jsonp", success: function(data) { // do something with data if(typeof callback!='undefined'){callback(data)}else{return data}; } }); }
vous ne pouvez pas. C'est parce que vous passez une méthode à la méthode .replace () une fonction littérale de fonction, la méthode de remplacement prendra cette fonction .Tostring () String renvoyée (son code source) sous forme d'argument.
C'est parce que. La méthode est synchrone et ne vous attendez pas à un rappel en tant que second argument, mais une chaîne, il convertira donc tout second argument en chaîne si elle n'est pas. p>
et si vous appelez réellement la fonction dans le paramètre, Cause Votre fonction n'a pas de valeur de retour définie analysera «indéfini» comme deuxième valeur. p>
Mais vous pouvez écrire votre propre méthode de remplacement asynchrone et l'ajouter au prototype de chaîne. Je ne peux pas éditer le code dans mon téléphone, alors quand je retourne à mon ordinateur, je l'ai écrit pour vous si vous n'avez pas compris. P>
EDIT: P>
En fait j'étais mal, vous pouvez utiliser un rappel dans la méthode de remplacement. Le problème est la façon dont vous utilisez un appel asynchrone à l'intérieur. Je ne sais pas qu'est-ce que tu essaies exactement de faire, alors j'espère que cela vous aidera. P> et appelez-le comme ceci: p>
Essayez Conversationjs: P>
https://github.com/rhyneantrew/conversation.js P>
Il vous permet de faire des appels de fonction de manière entièrement nouvelle, des appels essentiellement contraignants aux événements plutôt que de faire des appels explicites. Cela vous permettrait de faire exactement ce que vous essayez de faire de manière beaucoup plus «découplée», ce qui signifie qu'il sera également facile de changer et de maintenir à l'avenir! N'oubliez pas que les dépendances imbriquées ne sont jamais bonnes! P>
Vous devez soit seulement transformer l'exemple en une fonction synchrone (en définissant la synchronisation AJAX FAG, quelque chose avec des implications de mauvaise performance ou de modifier votre logique pour préciser les données avant de remplacer) ou vous devez écrire votre propre chaîne de cordes asynchrone. une fonction.
Que voulez-vous
exemple (Regexp. 2 $) code> pour revenir? Voulez-vous bloquer jusqu'à ce que l'appel AJAX revienne puis renvoyez le résultat de cela ou ...?
@MissingNo: "Préfettez les données avant de remplacer" Fonction asynchrone String-Remplacement "- Pouvez-vous expliquer comment je ferais cela? Merci!
@Ic.:
Exemple () code> renvoie une chaîne, le problème avec l'asynchrone est que
exemple (Regexp. 2 $) code> est indéfini. Je veux attendre que l'appel Ajax soit terminé et renvoie son résultat.
Ce que vous voulez n'est pas possible de cette façon, car
.replace code> doit attendre votre rappel. Cependant, la fonction intégrée
.replace code> n'attend pas. Vous pouvez correspondre une fois pour obtenir les articles à récupérer, les récupérer et enfin le remplacer par les éléments (que vous avez maintenant directement disponible).
Personnellement, je ferais le remplacement des regex du côté serveur pour éviter d'entraîner plusieurs appels AJAX.