«Destination DIV» исчезает в простом вызове jQuery AJAX - PullRequest
0 голосов
/ 11 февраля 2009

Редактировать: Важно: Крайне маловероятно, что у кого-либо, кто сталкивался с этим, будет та же самая проблема, что и у меня - проверьте мой ответ ниже для моего очень неясного решения. Были, однако, некоторые полезные ответы, которые могут относиться к другим ситуациям. Удачи, если у вас возникла похожая проблема.


У меня действительно простой вызов jQuery AJAX:

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

Возвращает (посредством действия ASP.NET MVC) очень простой HTML:

<DIV>something</DIV>

На моей странице есть целевой DIV, который изначально заполнен некоторым HTML:

<div class="padding15" id="cart">
   <% RenderCart(ViewData.Model.CartItems); %>
</div>

Проблема в том, что когда вызов возвращает исходный, #cart div просто исчезает, а не заменяется. Если я смотрю на DOM в Chrome, он просто пуст. Верный HTML-код определенно возвращается, потому что я вижу его в Fiddler.

Кроме того, этот код работает (но, очевидно, это не то, что я хочу, потому что он добавляется):

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

Я думаю, что я просто делаю что-то глупое - но я переключаюсь с Microsoft AJAX на jQuery, и я думаю, что есть просто небольшая фундаментальная вещь, которую я неправильно понимаю. Куда пропал мой DIV?

(Кстати: «woops» - это виртуальный каталог, чтобы убедиться, что на моем сайте нет корневых относительных ссылок во время разработки)

Ответы [ 5 ]

1 голос
/ 11 февраля 2009
append

не заменяет ваш div. Он вставляет данные в конец вашего div.

Вы можете попробовать

replaceWith( content ) 

вместо.

replaceWith в документации jQuery

0 голосов
/ 11 февраля 2009

Вау! Ну, это было безумие.

Оказывается, проблема в том, что этот код у меня есть во включенном файле 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 () ДЕЙСТВИТЕЛЬНО сработало и так было добавлено (). Я предполагаю, что некоторые из других методов были внутренне сбиты этим, но эти два не были.

Спасибо всем за быстрые предложения. Я уверен, что они помогут другим в какой-то момент.

0 голосов
/ 11 февраля 2009

Проверьте идентификатор вашего div, убедитесь, что правильный идентификатор передается в jquery.

0 голосов
/ 11 февраля 2009

Может быть, попробовать это?

$.get("/woops/store/cartsummary", {}, function(data) {
    $("#cart").html(data); 
});
0 голосов
/ 11 февраля 2009

1001 * попробовать *

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

( jQuery docs )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...