Задать вопрос

Как заставить скрипт подгружаемый через AJAX/JSONp работать?

Добрый день, я только изучаю JS, на стороне сервера у меня php фреймворк. Я делаю кросдоменные запросы посредством Jsonp, через get параметры я отправляю атрибуты на билдинг форму. Сервер осуществляет буфферизацию вида и возвращает мне HTML код. В нем имеются Jquery - UI Slider(ползунки цен).

На сайте откуда вызывается запрос, UI установлен, но новые элементы он не видит. Контент я вставляю посредством
$('body').append('<div id="container-form">');
$('#container-form').append(response.form_html);


На сабмите висит обработчик по клику, он собирает все данные и отправляет их. Сбор данных делаю через
$(document).find('[name="someField"]').val();
Потому что, опять же не попадает контент в DOM. Я не очень понимаю как вешать Хендлеры и как решить подобный косяк. Можете подсказать в какую сторону смотреть? Или пример "подхвата" скриптом.

UPD дополнил полным кодом.
(function(){       
    var = params = // тут сами параметры, сам парсинг рабора параметров запроса я убрал, что бы не мусорить вам.

    var res = $.ajax({
      url: "https://site.com/form-request",
      method: "GET",
      data: params,
      dataType: "jsonp",
      jsonp: "callback",
          success:function(response){
              $('body').append('<div id="container-form">');
              $('#container-form').append(response.form_html);
          }
    });    
    
    $(document).on('submit', '#landing_form', function(event){        
        var data = {};
        if (params['login']) data['login'] = $(document).find('[name="login"]').val();
      
        var request = $.ajax({
            url: "https://site.com/form-request",
            method: "GET",
            data: data, 
            dataType: "jsonp",
            success:function(response){
                if(response.redirect_url){
                    //Если форма прошла валидацию, контроллер возвращает ссылку на редирект.
                    window.location = response.redirect_url;
                }else{
                    //Если форма не прошла валидацию, она возвращает HTML с ошибками и формой.
                    $('#container-form').empty();
                    $('#container-form').append(response.form_html);
                }
          }
        });        
      event.preventDefault(); 
    });
})();
  • Вопрос задан
  • 237 просмотров
Подписаться 1 Оценить 4 комментария
Решения вопроса 1
@KFan
Веб-программист
submit не идёт вверх по дереву (а $(document).on(event, selector, func), ловит события на самом верху дерева.

Ваше решения, это после каждого изменения dom (перезаписи формы), вешать обработчик заного.

Например вынесите обработчик в "НЕ АНОНИМНУЮ" функцию, и каждый раз назначайте его заного

другой вариант, добавить вызов обработчика сабмит в атрибуты например:

<form onsubmit="callSubmitHandler(); return false;">
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы