[ajax, post]Заменить часть html на возвращённый с сервера
Добрый день.
Учебный проект с использованием ajax и jQuery: есть форма, есть код проверки на правильность введённых значений на стороне клиента (используется jquery validate), на submitHandler навешан вызов моей функции, которая перехватывает отсылку post-запроса на сервер. С помощью $.post получает ответ сервера: это код новой версии этой страницы целиком и я хочу выдернуть часть html-кода из этого ответа и заменить им "устаревшие" элементы на странице. $(function () { $("form[action$='/Board/SetNumberOfHands']").validate({ submitHandler: function (form) { if ($(form).find("input").attr("name") == "numberOfHands") setNumberOfHands(form); else if ($(form).find("input").attr("name") == "curHand") calculateForHand(form); return false; }, ... }); Сама страница имеет вид: ... <script src="../../Scripts/jquery-1.4.1.min.js"" type="text/javascript"></script> <script src="../../Scripts/jquery.validate-vsdoc.js" type="text/javascript"></script> <script src="../../Scripts/code.js" type="text/javascript"></script> </head> <body> <div id="board"> <div id="hand1" class="hands"> <a...><img... /></a> </div> <div id="hand2" class="hands"> <a...><img... /></a> </div> <div id="hand3" class="hands"> <a...><img... /></a> </div> <div id="hand4" class="hands"> <a...><img... /></a> </div> <div id="boardHand" class="hands"> <a...><img... /></a> </div> <div id="#errorMsgBox" class="field-validation-error"></div> </div> ... <p> <a href...><!-- ссылка, которую сначала не видно --></a> <span id="result"> <!-- всякий текст --> </span> <span id="numberOfHandsSpan"> Количество игроков:<br /> <!-- тут наша форма --> </span> <span id="calcSpan"> ... <!-- тут ещё одна форма (не та, post которой сейчас обрабываем) --> </span> </p> Сначала был такой код: // обрабатываем отсылку формы 'setNumberOfHands' function setNumberOfHands(form) { $.post($(form).attr("action"), $(form).serialize(), function (response) { $("#board").html($(response).find("#board").html()); $("#calcSpan").html($(response).find("#calcSpan").html()); }); } calcSpan отлично заменялся, но вот board нет: вместо старой структуры вложенных div'ов оставался пустой <div id="board"></div> Тогда я решил обрабатывать поотдельности (и включил и другие элементы): // обрабатываем отсылку формы 'setNumberOfHands' function setNumberOfHands(form) { $.post($(form).attr("action"), $(form).serialize(), function (response) { $("#hand1").html($(response).find("#hand1").html()); $("#hand2").html($(response).find("#hand2").html()); $("#hand3").html($(response).find("#hand3").html()); $("#hand4").html($(response).find("#hand4").html()); $("#boardHand").html($(response).find("#boardHand").html()); $("#errorMsgBox").html($(response).find("#errorMsgBox").html()); $("#pack").html($(response).find("#pack").html()); $("#shuffle").html($(response).find("#shuffle").html()); $("#result").html($(response).find("#result").html()); $("#calcSpan").html($(response).find("#calcSpan").html()); }); Всё заработала. До этого пробовал использовать replaceWith: $("#board").replaceWith(...) Не работало и для невложенных тэгов. Проект учебный, поэтому и такая неэффективность: загрузка всей страницы с сервера, прошу не указывать на этот факт, мне важно отработать использование ajax и jquery. Прошу объяснить причину такого поведения и как наиболее эффективно можно работать со вложенными тэгами в подобных случаях? Долго рылся в инете, ничего не нашёл, надеюсь на вашу помощь. Спасибо. |
Часовой пояс GMT +3, время: 00:51. |