Как обновить часть сайта без обновления всей страницы после jquery ajax - PullRequest
0 голосов
/ 12 марта 2012

Я создаю форум с динамическими вопросами и хочу обновлять только список тем, когда пользователь рекламирует новую тему, я не хочу обновлять всю страницу.Это возможно?

Это моя разметка для таблицы, в которой перечислены сообщения:

<table class="topics">
    <tr>
        <th width="5%"></th>
        <th width="45%"><a href="">Subject</a></th>
        <th width="15%"><a href="">Author</a></th>
        <th width="10%"><a href="">Replies</a></th>
        <th width="10%"><a href="">Views</a></th>
    </tr>
    <?php foreach ($discussions as $discussion) : ?>
    <tr class="alt">
        <td><a href=""><img src="<?= site_url('assets/images/featured-posts-icon.png') ?>" /></a></td>
        <td><a href="<?= site_url('discussion/test/' . $discussion->stub) ?>" class="subject"><?php echo $discussion->title; ?></a></td>
        <td><a href=""><?php echo $discussion->author; ?></a></td>
        <td><?php echo $discussion->replies; ?></td>
        <td><?php echo $discussion->views; ?></td>
    </tr>
    <?php endforeach; ?>
</table>

Разметка для добавления нового сообщения:

<input type="text" name="topic" id="topic" />
<ul class="editor-tools">
    <li class="bold"></li>
    <li class="italic"></li>
    <li class="underscore"></li>
    <li class="list"></li>
    <li class="quote"></li>
</ul>
<textarea id="thread-content"></textarea>
<a href="" class="button create-discussion">Start discussion</a>

Яполучение постов с помощью php.Теперь, когда я добавляю новый пост с ajax, у меня есть следующий код:

$('a.create-discussion').on('click', function(e){
    e.preventDefault();
    var title = $('input#topic').val(),
        courseId = 1,
        message = $('textarea#thread-content').val();

    $.ajax({
        type : 'POST',
        url : ROOT_PATH + 'main/ajaxjson/create_discussion',
        data : {title: title, courseId: courseId, message: message},
        dataType: 'json'
    }).done(function(result){
        // do something here?
    });
})

Ответы [ 3 ]

1 голос
/ 12 марта 2012

вам, в основном, нужно НАДЕЖДАТЬ вещи клиенту

Вы можете использовать эти 3 метода

  1. со всех страниц вы можете продолжать делать ajax-вызов, чтобы проверить, добавлена ​​новая тема (длинный опрос)
  2. вы можете попробовать использовать COMET
  3. в современных браузерах есть что-то, называемое web-сокетами, вы можете попробовать

вы можете реализовать длинный опрос следующим образом

  window.setInteval("func()",10000);

  function func()
  {
      //ajax call to you server which returns the latest posts
      str = xhr.responseText;

      if(str)
      {
           document.getElementById("id").innerHTML += str;
      }
  }
1 голос
/ 12 марта 2012

Вам необходим серверный сценарий для создания ПРОСТО разметки для части страницы, которую вы хотите «обновить».

Затем используйте jQuery, чтобы установить для внутреннего HTML-кода этой области значение, возвращаемое сервером после того, как вы поработали.

PS Приведите в порядок ваш вопрос, лень не поможет вам в будущем.

0 голосов
/ 12 марта 2012

Вы должны использовать вместо done ()

success:function(){
       // do something here
}

как в документации jQuery :

$.ajax({
  url: 'http://fiddle.jshell.net/favicon.png',
  beforeSend: function( xhr ) {
    xhr.overrideMimeType( 'text/plain; charset=x-user-defined' );
  },
  success: function( data ) {
    if (console && console.log){
      console.log( 'Sample of data:', data.slice(0,100) );
    }
  }
});

success (data, textStatus, jqXHR) Функция, Массив

Функция, вызываемая в случае успешного выполнения запроса.Функция получает три аргумента: данные, возвращаемые с сервера, отформатированные в соответствии с параметром dataType;строка, описывающая статус;и объект jqXHR (в jQuery 1.4.x, XMLHttpRequest).Начиная с jQuery 1.5, настройка успеха может принимать массив функций.Каждая функция будет вызываться по очереди.Это Ajax Event.

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