Uncaught TypeError: Cannot read property 'createDocumentFragment' undefined
Je suis en train d'essayer de récupérer une page web et de les charger dans un bootstrap 2.3.2 liste. Pour l'instant j'ai:
$.ajax({
type: "POST",
url: "AjaxUpdate/getHtml",
data: {
u: 'http://stackoverflow.com'
},
dataType: 'html',
error: function(jqXHR, textStatus, errorThrown) {
console.log('error');
console.log(jqXHR, textStatus, errorThrown);
}
}).done(function(html) {
console.log(' here is the html ' + html);
$link = $('<a href="myreference.html" data-html="true" data-bind="popover"'
+ ' data-content="' + html + '">');
console.log('$link', $link);
$(this).html($link);
//Trigger the popover to open
$link = $(this).find('a');
$link.popover("show");
Quand je activer ce code j'obtiens l'erreur:
Uncaught TypeError: Cannot read property 'createDocumentFragment' undefined
Quel est le problème et comment puis-je résoudre ce problème?
- Bonne question. Twitter bootstrap 2.3.x ne pas utiliser des fragments à tous. Pouvez-vous reproduire l'erreur dans un violon? Vous utilisez peut-être une autre bibliothèque, d'essayer de faire quelque chose avec le balisage, comme react.js ou similaires? Juste en théorie.
- Pouvez-vous spécifier la ligne à laquelle l'erreur se produit sur? Un numéro de ligne à partir de votre propre code sera enterré dans la pile quelque part.
Vous devez vous connecter pour publier un commentaire.
La raison de l'erreur est la
$(this).html($link);
dans votre.done()
de rappel.this
dans le callback est la[...]object that represents the ajax settings used in the call ($.ajaxSettings merged with the settings passed to $.ajax)[...]
et de ne pas le$(".btn.btn-navbar")
(Ou ce que vous attendez là où il devrait consulter).L'erreur est levée, car jQuery en interne appel
.createDocumentFragment()
sur leownerDocument
de l'objet que vous passez avecthis
lorsque vous exécutez$(this).html($link);
mais dans votre code lathis
n'est pas un DOMElement, et n'ont pas deownerDocument
. En raison de cetteownerDocument
estundefined
et c'est la raison pourquoicreateDocumentFragment
est appelée surundefined
.Vous devez soit utiliser le
contexte
option pour votreajax
demande. Ou vous avez besoin d'enregistrer un référence à la DOMElement que vous voulez modifier dans une variable que vous pouvez accéder à la fonction de rappel.context : theElementYouWant,
à votre$.ajax()
options (pour plus de détails, vous devez regarder dans la doc de jQuery.ajax que j'ai mis en lien), puis lethis
dans le rappel reportez-vous à latheElementYouWant
. Je ne peux pas faire un exemple car je ne sais pas quel élémentthis
devrait être 😉$.ajax({ context: $(this), method: "POST", url: url, data: {leaveid_m: leaveid} }) .done(function( msg ) { $(this).text('loading...'); $('#empdata').remove(); var Summary_m = $(msg).find('#empdata'); $('#empdata2').before(Summary_m); });
Que des erreurs se produisent parce que
this
est en se référant à l'ajax d'objet et non sur l'élément DOM, pour résoudre ce problème, vous pouvez faire quelque chose comme ceci: