2014-01-07 7 views
1

Я пытаюсь загрузить файл php в div #main при нажатии ссылки. Содержимое html загружается, но фактический php-код, включенный в файл, не работает. Вот что я получил:jquery ajax load php в указанный div

Ссылка вызвать все:

<a id="nav" href="http://domain.com/inc/file.php"> 

JQuery:

jQuery(document).ready(function($) { 

    $("#nav").on('click', function (e) { 
     e.preventDefault(); 
     $("#main").empty(); 

     $.ajax({ 
      url: $("#nav").attr('href') 
     }).done(function(data) { 
      $('#main').html(data); // display data 
     }); 
    }); 

}); 

код из file.php (в основном WordPress функций):

<div id="hostels" class="section cf"> 

    <?php get_a_post(31); ?> 

    <article id="swiss" <?php post_class('swiss bg col span-1-3'); ?> role="article"> 
     <h3> 
      <a href="<?php the_permalink(); ?>"> 
       <span class="logo-pl-small"><?php include(TEMPLATEPATH . '/library/svg/logo.svg'); ?></span> 
       <span class="">Swiss Cottage &ndash; London UK</span> 
      </a> 
     </h3> 
     <?php if (has_post_thumbnail()) { the_post_thumbnail(); } ?> 
     <div class="entry-content"> 
      <?php the_excerpt(); ?> 
      <?php edit_post_link(__('Edit', 'bonestheme')); ?> 
      <?php if (get_post_meta($post->ID, 'vidlink', true)) { 
       echo apply_filters('the_content', get_post_meta($post->ID, 'vidlink', true)); 
      } ?> 
     </div> 
    </article> 

</div> 

ВЫВОД:

<div id="main"> 
    <div id="hostels" class="section cf"> 
    </div> 
</div> 

файл начинает загружаться, но как только <?php get_a_post(31); ?> достигнут, файл не продолжает загружаться.

Я мог ошибаться, но я подумал, что с помощью $.ajax код php будет выполняться на сервере, а код, который он выдает, будет загружаться в мой #main div.

+0

Проверьте ошибку скрипта. Я не знаю Wordpress, но, возможно, вы не можете вызвать этот метод следующим образом: –

+0

Попробуйте добавить ' 'в начале' file.php' – Curious

+1

Код отлично работает при репликации. Таким образом, ошибка в вашем PHP. Запустите 'http: // domain.com/inc/file.php' в своем браузере и посмотрите, что происходит/результат. – davidkonrad

ответ

3

У меня есть это несколько работающих. Я нашел this tutorial for Ajax Powered Loops with jQuery and WordPress, из которого я обнаружил, что (как я уже догадался) файлы, которые я создал, должны понимать функции WordPress. Для этого мне нужно включить:

require_once('../../../../wp-load.php'); 

В моем случае это соответствующий путь от file.php.

Есть еще некоторые проблемы, такие как короткие коды, созданные из плагинов, которые не работают полностью, но это выходит за рамки моего первоначального вопроса.

В учебнике выше много полезной информации, касающейся ajax и Wordpress, хотя, если у кого-либо возникают подобные проблемы, я бы рекомендовал прочитать.

+0

+1, вы могли бы принять свой собственный ответ, возможно, помогая другим людям в будущем. Что касается '../../../../ wp-load.php', то _must_ будет легкодоступной переменной пути в wordpress. Но не могу сказать/запомнить, отдал это много лет назад, не думайте, что WP раскрывает хорошую практику программирования или прозрачную модель, imho. – davidkonrad

+0

@davidkonrad Возможно, вы сможете использовать 'home_url ('wp-load.php');'. Не могу принять мой собственный ответ на пару дней. Вернется, чтобы сделать это. –

1

Вместо

$.ajax({ 
    url: $("#nav").attr('href') 
}).done(function(data) { 
    $('#main').html(data); // display data 
}); 

почему бы не более простой

$("#main").load('http://domain.com/inc/file.php'); 

??

+1

не объясняет, почему код OP не работает, но ya load() был бы более точным здесь –

+0

В этом случае '.load()' не загружал содержимое в '# main', а ссылался на полную страницу , –