编辑重要提示:遇到此问题的人极不可能遇到与我完全相同的问题 - 请查看下面的答案以了解我非常模糊的解决方案。然而,有一些有用的回应可能适用于其他情况。祝你好运,如果你有类似的问题。
我有一个非常简单的jQuery AJAX调用:
$("#cart").load("/woops/store/cartsummary");
这将返回(通过ASP.NET MVC Action)一些非常简单的HTML:
<DIV>something</DIV>
在我的页面上,我有一个目标DIV,最初填充了一些HTML:
<div class="padding15" id="cart">
<% RenderCart(ViewData.Model.CartItems); %>
</div>
问题是当呼叫返回原始#cart时,只是消失而不是被替换。如果我在Chrome中查看DOM,它就完全是空的。肯定会返回正确的HTML,因为我在Fiddler中看到它。
此外此代码有效(但显然不是我想要的,因为它正在追加):
$.get("/woops/store/cartsummary", {}, function(data) {
$("#cart").append(data);
});
我认为我只是在做一些愚蠢的事情 - 但我正在从微软AJAX转向jQuery,我认为这只是一些我误解的基本问题。我的DIV哪里去了?
(BTW:'woops'是一个虚拟目录,用于确保我的网站在开发过程中没有根相对链接)
答案 0 :(得分:1)
append
不会替换你的div。它将数据粘贴到div的后面。
你可以尝试
replaceWith( content )
代替。
答案 1 :(得分:0)
答案 2 :(得分:0)
或许试试这个?
$.get("/woops/store/cartsummary", {}, function(data) {
$("#cart").html(data);
});
答案 3 :(得分:0)
检查div的ID,确保将正确的ID传递给jquery。
答案 4 :(得分:0)
哇!那太疯狂了。
原来问题是因为我在一个包含的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。
上面的代码来自这篇文章How do I get a jQuery selector's expression as text?。我认为作者自重写以来,但它出于某种奇怪的原因打破了这一点。
DIV刚刚消失 - 但我被抛出因为replaceWith()DID工作,所以append()也是如此。我猜其他一些方法在内部被这个绊倒了,但是那两个不是。
感谢大家的快速建议。我相信他们会帮助别人。