Mootools добавление HTML после запроса AJAX

У меня есть вызов Ajax, который выглядит так,

    $('campaignType').addEvent('change', function(){
  alert($('campaignType').value);
  var request = new Request({
   method: 'get',
   url: '/admin/admin_' + $('campaignType').value + '.php',
   onRequest:function() {
    alert('Request has been made, please be patient')
   },
   onComplete:function(response) {
    $('campaignForm').append(response);
   }
  }).send();
 });

По сути, то, что происходит, зависит от того, какое значение `$('campaignType') какого-то HTML-кода возвращается из другого файла, однако я не могу заставить HTML-код добавляться в мой контейнер. Кто-нибудь хочет дать мне совет?

Спасибо

4 ответа

Решение Dimitar близко, но это плохое решение, так как оно воссоздает все содержимое элемента и уничтожает подключенные обработчики событий. Лучшее решение было бы:

Element.implement({
    append: function(newhtml) {
        return this.adopt(new Element('div', {html: newhtml}).getChildren());
    }
});

это на самом деле то, что внутренне делает Request.HTML.

.append не является допустимым прототипом элемента в mootools.

если вы хотите добавить html к существующему, вы можете либо СДЕЛАТЬ.append действительным, определив в своем сайте бит lib/core (я бы посчитал это, если вы будете часто его использовать):

Element.implement({
    append: function(newhtml) {
        // silly name, does not say to me you are appending html. rename to appendHTML
        return this.set("html", this.get("html") + newhtml);
    }
});

или в вашем onComplete сделать:

var cf = $('campaignForm');
cf.set("html", cf.get("html") + this.response.text);

повеселись:)

Если вы используете mootools 1.2.4, вы можете изменить Request в Request.HTML и использовать append вариант. (Не уверен, что опция добавления была в более старых версиях)

$('campaignType').addEvent('change', function(){
  new Request.HTML({
    method: 'get',
    url: '/admin/admin_' + $('campaignType').value + '.php',
    append: $('campaignForm')
  }).send();
});

Я думаю, что вы хотели бы использовать onSuccess вместо onComplete

Другие вопросы по тегам