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

时间:2009-02-11 08:56:07

标签: jquery ajax

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


我有一个非常简单的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'是一个虚拟目录,用于确保我的网站在开发过程中没有根相对链接)

5 个答案:

答案 0 :(得分:1)

append

不会替换你的div。它将数据粘贴到div的后面。

你可以尝试

replaceWith( content ) 

代替。

replaceWith in jQuery documentation

答案 1 :(得分:0)

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

jQuery docs

答案 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()也是如此。我猜其他一些方法在内部被这个绊倒了,但是那两个不是。

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