‘Destination DIV’ disparaissant dans un simple appel jQuery AJAX

Edit: Important: Il est extrêmement improbable qu’une personne ayant rencontré ce problème ait exactement le même problème que moi – vérifiez ma réponse ci-dessous pour ma solution très obscure. Il y a cependant eu des réponses utiles qui peuvent s’appliquer à d’autres situations. Bonne chance si vous rencontrez un problème similaire.


J’ai un appel jQuery AJAX très simple:

$("#cart").load("/woops/store/cartsummary"); 

Ceci retourne (au moyen d’une action ASP.NET MVC) un code HTML très simple:

 
something

Sur ma page, j’ai une destination DIV qui est initialement peuplée avec du HTML:

 

Le problème, c’est que lorsque l’appel renvoie le #cart div original disparaît au lieu d’être remplacé. Si je regarde le DOM dans Chrome, il est complètement vide. Le code HTML correct est définitivement renvoyé car je le vois dans Fiddler.

De plus, ce code fonctionne (mais ce n’est évidemment pas ce que je veux parce qu’il ajoute):

 $.get("/woops/store/cartsummary", {}, function(data) { $("#cart").append(data); }); 

Je pense que je fais juste quelque chose de stupide – mais je passe de Microsoft AJAX à jQuery et je pense qu’il y a juste une petite chose fondamentale que je ne comprends pas. Où est passée ma DIV?

(BTW: ‘woops’ est un répertoire virtuel pour m’assurer que mon site n’a pas de liens relatifs racine pendant le développement)

 append 

ne remplace pas votre div. Il colle les données à l’arrière de votre div.

Tu pourrais essayer

 replaceWith( content ) 

au lieu.

replaceWith dans la documentation jQuery

essayer

 $.get("/woops/store/cartsummary", {}, function(data) { $("#cart").html(data); }); 

( documentation jQuery )

Peut-être essayer ceci?

 $.get("/woops/store/cartsummary", {}, function(data) { $("#cart").html(data); }); 

Vérifiez l’ID de votre div, assurez-vous que l’ID correct est transmis à jQuery.

Hou la la! C’était fou.

Le problème vient de ce code que j’ai dans un fichier JS inclus:

  jQuery.fn._init = jQuery.fn.init jQuery.fn.init = function(selector, context) { if (typeof selector === 'ssortingng') { return jQuery.fn._init(selector, context).data('selector', selector); } return jQuery.fn._init(selector, context); }; 

J’utilise jQuery 1.2.6.

Le code ci-dessus provient de ce message. Comment obtenir l’expression d’un sélecteur jQuery sous forme de texte? . Je pense que l’auteur l’a depuis réécrit, mais sa rupture pour une raison étrange.

La DIV disparaît tout simplement – mais je me suis fait jeter parce que replaceWith () DID fonctionnait et donc append (). Je suppose que certaines des autres méthodes doivent être déclenchées en interne par cela, mais ces deux-là n’étaient pas.

Merci pour tous les suggestions rapides. Je suis sûr qu’ils aideront les autres à un moment donné.