2015-01-16 3 views
0

Я пытаюсь инициировать некоторый jQuery ($('#slider').leanSlider();) после успешного ответа Ajax. Включение его в обратный вызов успеха не работает. Я нашел answer here, который, как я считаю, связан, но мне сложно понять, что я должен делать. Как я могу запустить эту строку после успешного ответа Ajax?Инициировать строку jQuery после успешного ответа Ajax?

$('.post-link').click(function(e) { 
    e.preventDefault(); 

    var post_id = $(this).attr('rel'), 
     ajaxURL = site.ajaxurl; 

    function projectShow() { 
     $.ajax({ 
      type: 'POST', 
      url: ajaxURL, 
      data: {'action': 'load-content', post_id: post_id }, 
      success: function(response) { 
       $('#project-container').html(response); 
       $('#slider').leanSlider(); <--// This isn't initiating 
       } 
       return false; 
      } 
     }); 
    } 
    projectShow(); 
}); 
+0

Проверьте, разрешен ли $ .fn.leanSlider с помощью консоли. Также дайте некоторое время после вставки HTML, используя тайм-аут функции обратного вызова для инициализации слайдера. – gskema

+0

Также внедрите обработчик ошибок и проверьте, не вызвана ли ошибка ajax ошибкой – Exinferis

+0

Почему вы создаете функцию 'projectShow()' на каждом клике, а не создаете ее где-то где-то и переходите в 'post_id' и' ajaxURL'? – Klors

ответ

1

Ответ, на который вы ссылаетесь, здесь не применим. Это применимо, если у вас был код после вызова projectShow(). Поскольку этот код находится в обратном вызове, он будет выполнен только с успехом.

Я заметил, что фигурные скобки в вашем коде отключены, так что это может быть первой проблемой. Кудрявая скобка до return false; закрывает обратный вызов, который делает весь объект конфигурации недействительным. Если это не ошибка копирования и вставки, это предотвратит выполнение вызова.

Убедитесь, что ваш вызов AJAX действительно сделан и возвращается успешно. В противном случае обратный вызов никогда не будет вызван. Однако, за исключением синтаксической ошибки, код выглядит нормально для меня.

+0

, как @jsfan сказал проверить ваш код пути возврата, а также добавить -> ошибка: функция (XHR, ajaxOptions, thrownError) { \t \t \t \t предупреждения ("\ nSTATUS:" + XHR.status + "\ nError:" + thrownError); \t \t} чтобы проверить, действительно ли вы получаете код состояния для установки по запросу – SilentTremor

+0

Это была ошибка копирования/вставки. Вызов Ajax отлично работает, за исключением одной строки. – J82

0
$('.post-link').click(function(e) { 
    e.preventDefault(); 

    var post_id = $(this).attr('rel'), 
     ajaxURL = site.ajaxurl; 

    function projectShow() { 
     $.ajax({ 
      type: 'POST', 
      url: ajaxURL, 
      data: {'action': 'load-content', post_id: post_id }, 
     }).done(function(response){ 
      $('#project-container').html(response); 
      $('#slider').leanSlider(); <--// This isn't initiating 
      return false; 
     }).fail(function(error){ 
      //handle error 
     }); 
    } 
    projectShow(); 
}); 

.done() является prefferred к успеху jQuery.ajax handling continue responses: "success:" vs ".done"?

«jqXHR.done (функция (данные, textStatus, jqXHR) {}); Альтернативой конструкции к выбору успех обратного вызова, то .done() заменяет устаревший метод jqXHR.success(). Подробнее о деталях см. в описании отложенных.done(). "
http://api.jquery.com/jquery.ajax/

+0

Я просто попробовал, но это все еще не начинается. Спасибо за подсказку '.done()'. – J82

+0

Возможно, это проблема с функцией 'leanSlider()'? – Craicerjack

Смежные вопросы