Сложность обработки возврата из Ajax-вызова с js и прототипом - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь вставить li, содержащий выбор после других в ul, с данными опций выбора, полученными из базы данных через Ajax, и он не работает.

С заранее извинениямидля длины ...

Я удалился несколько лет назад от веб-разработки, где я использовал Prototype довольно немного в более поздние годы.Сейчас я немного ржавый, но я пытаюсь сделать что-то для чисто личного использования.Это не будет в открытой сети, только на нашем локальном сервере.Все шло хорошо (если медленно!), Но теперь я ударил Ajax по кирпичной стене.

Вот что я пытаюсь сделать:

  • У меня есть форма с одним или несколькими выборами, каждый в своем собственном li, все в одном ul.

  • Каждый выбор содержит один и тот же список элементов из таблицы в базе данных MySQL.

  • У последнего выбора ничего не выбрано и есть класс "addselect".

  • Идея состоит в том, что если я выберу что-то из этого последнего выборазапускается событие onChange, которое вызывает Ajax-скрипт для добавления нового выбора (содержащего те же элементы).Это настраивается при загрузке страницы в "document.observe ('dom :loaded', function () ...") вверху файла javascript.

  • Каждый выбор имеетпоследовательное имя и идентификатор, например, 'name = "country [0]" id = "country_0"', следующая страна [1] и country_1 и т. д. Вновь созданный выбор будет иметь следующее имя и идентификатор в последовательности.Я надеюсь, что все имеет смысл.

Итак ... Функция обработчика, установленная в 'dom: загружен ...', получает следующий индекс для имени и идентификатора объекта.new select и отправляет this ('entryindex') и имя таблицы для поиска ('list') в сценарий Ajax, и мы отправляемся:

var pars = 'list=' + list + '&entryindex=' + newIndex;
var url = base + 'ajaxgetmenu';

// send request to do the business
var myAjax = new Ajax.Request (url, {
    method: 'post',
    parameters: pars,
    onSuccess: function (req) {
        var xml = req.responseText;
        ...

На этом пока все бесполезно.Вкладка «Ресурсы» в веб-инспекторе Safari показывает абсолютно правильный результат - новый приятный выбор с правильным именем и содержимым - в разделе «XHR». Так что я знаю, что скрипт вызывается и работает правильно.Далее:

        var newhtml = xml.getElementsByTagName('newhtml')[0].firstChild.nodeValue;

Это взято из сценария, который я разработалназад в мои профессиональные дни, которые я знаю, работал отлично.Но что-то здесь не так, потому что это не работает!Если я помещаю предупреждение («ок») перед этой строкой, оно появляется, но если я ставлю его после этой строки, оно не появляется.И все же об ошибках не сообщается.И, конечно, следующая строка тоже не работает:

        $('thisid').up('ul').insert (newhtml);

(И я знаю, что "$ ('thisid')" правильно, потому что я добавил это в предупреждение, чтобы проверить это.)

Так что я упростил это.Я отказался от XML и вместо этого сделал результат простым текстом для дословной вставки.Опять же, скрипт дает идеальный результат в веб-инспекторе Safari, но даже когда newhtml представляет собой простой текст (и я вообще пропускаю строку xml.getElementsByTagName), он завершается неудачно.И снова, предупреждение перед строкой вставки работает, но не одно после нее.Действительно, я могу поместить newhtml в оповещение, и оно отображается правильно (не все это в Safari, где, я думаю, оно слишком длинное, но все в Firefox).

Я попробовал всеЯ могу думать, поэтому, если у кого-то есть мудрость в этом, я был бы очень благодарен.Это, наверное, что-то совершенно очевидное, глядя мне в лицо ...

В ответ Берги:

Поскольку то, что я пытаюсь сделать, не работает, в DOM раньше не было никаких изменений ипосле исполнения.Вот соответствующий бит:

<ul id="country">
    <li><label>Countries:</label>
        <select class="finput addselect" name="country[0]" id="country_0">
            <options...
        </select>
    <li><label></label>
        <select class="finput addselect" name="country[1]" id="country_1">
            <options...
        </select>
    </li>
</ul>

OnChange применяется к # country_1, и после этого должен быть вставлен новый выбор, так что up ('ul') должен это сделать, верно?Я попытался (1), и это тоже не сработало.Я попытался просто вставить «тест», и это не сработало ...

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