‘Destination DIV’在简单的jQuery AJAX调用中消失了

编辑:重要提示:遇到此问题的人极不可能遇到与我完全相同的问题 – 请查看下面的答案以了解我非常模糊的解决方案。 然而,有一些有用的回应可能适用于其他情况。 祝你好运,如果你有类似的问题。


我有一个非常简单的jQuery AJAX调用:

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

这将返回(通过ASP.NET MVC Action)一些非常简单的HTML:

 
something

在我的页面上,我有一个目标DIV,最初填充了一些HTML:

 

问题是当调用返回原始#cart div时,只是消失而不是被替换。 如果我在Chrome中查看DOM,它就完全是空的。 肯定会返回正确的HTML,因为我在Fiddler中看到了它。

此外这个代码有效(但显然不是我想要的,因为它是附加的):

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

我想我只是在做一些愚蠢的事情 – 但我正在从微软AJAX转向jQuery,我认为这只是一些我误解的基本问题。 我的DIV哪里去了?

(顺便说一下:’woops’是一个虚拟目录,用于确保我的网站在开发过程中没有根相对链接)

 append 

不会取代你的div。 它将数据粘贴到div的后面。

你可以试试

 replaceWith( content ) 

代替。

在jQuery文档中替换

尝试

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

( jQuery docs )

也许试试这个?

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

检查div的ID,确保将正确的ID传递给jquery。

哇! 那太疯狂了。

原来问题是因为我在一个包含的JS文件中有这个代码:

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

我正在使用jQuery 1.2.6。

上面的代码来自这篇文章如何将jQuery选择器的表达式作为文本? 。 我认为作者自重写以来,但它出于某种奇怪的原因打破了这一点。

DIV刚刚消失 – 但我被抛出因为replaceWith()DID工作,所以append()也是如此。 我猜其他一些方法在内部被这个绊倒,但这两个方法都没有。

感谢大家快速的建议。 我相信他们会帮助别人一点。