Je dispose d'un "moteur ajax" basé sur jQuery. Et après avoir reçu la réponse, je dois manipuler la réponse avant de l'insérer dans la page. Mais j'ai besoin que la réponse soit un objet jQuery. Je fais cela avec :
tmpActualResult = $( '' ).html( actualResult );
Mais à ce moment-là, jQuery (ou le navigateur lui-même ?) exécute les scripts inclus dans la réponse - et cela ne devrait pas se produire. Je vais exécuter les scripts manuellement plus tard.
En particulier, je vais :
- analyser la réponse (accéder aux balises/éléments inclus)
- insérer les éléments dans la page (manipulation du DOM)
- exécuter les scripts éventuels (qui sont reçus)
je vous remercie
Éditer : Si quelqu'un est également intéressé, j'ai créé une solution plus générale en étendant la fonction jQuery.domManip, comme suggéré dans la première réponse.
(function($, oldDomManip) {
// Remplacer la fonction core domManip
$.fn.domManip = function() {
function evalScript(i, elem) {
jQuery.globalEval(elem.text || elem.textContent || elem.innerHTML || "");
}
var scripts = [];
// laissez jQuery construire les fragments
var results = jQuery.buildFragment(arguments[0], this, scripts);
// changer le paramètre pour les fragments créés
arguments[0] = results.fragment.childNodes;
// faire ce que jQuery fera - sans scripts
oldDomManip.apply(this, arguments);
if (scripts.length) {
// si la connexion est active
if (jQuery.active != 0) {
$(this).bind("ajaxStop.scriptCache", function() {
$.each(scripts, evalScript);
$(this).unbind("ajaxStop.scriptCache");
});
} else
$.each(scripts, evalScript);
}
return this;
};
})(jQuery, jQuery.fn.domManip);
il n'exécutera pas les scripts avant que la requête ajax soit terminée. ça a marché pour moi.