javascript - bootstrap - Unkeught TypeError: no se puede leer la propiedad ''createDocumentFragment'' de undefined
bootstrap js (2)
El motivo del error es $(this).html($link);
en su devolución de llamada .done()
.
this
en la devolución de llamada hace referencia al [...]object that represents the ajax settings used in the call ($.ajaxSettings merged with the settings passed to $.ajax)[...]
y no a $(".btn.btn-navbar")
(O lo que sea que espere a lo que debería referirse).
El error se produce porque jQuery llamará internamente a .createDocumentFragment()
en el documento ownerDocument
del objeto que pase con this
cuando ejecute $(this).html($link);
pero en su código, this
no es un elemento DOME, y no tiene un ownerDocument
. Debido a que ownerDocument
undefined
está undefined
y es por eso que createDocumentFragment
está llamado undefined
.
O necesita usar la opción de context
para su solicitud de ajax
. O bien, debe guardar una referencia al elemento DOMElement que desea cambiar en una variable a la que puede acceder en la devolución de llamada.
Intento agarrar una página web y cargarla en un popover bootstrap 2.3.2. Hasta ahora tengo:
$.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");
Cuando activo este código, obtengo el error:
Unkeught TypeError: no se puede leer la propiedad ''createDocumentFragment'' de undefined
¿Cuál es el problema aquí y cómo puedo solucionarlo?
Ese error ocurre porque this
se refiere al objeto ajax y no al elemento DOM, para resolverlo puedes hacer algo como esto:
$(''form'').on(''submit'', function(){
var thisForm = this;
$.ajax({
url: ''www.example.com'',
data: {}
}).done(function(result){
var _html = ''<p class="message">'' + result + ''</p>'';
$(thisForm).find(''#resultDiv'').html(_html);
});
});