Ищете руководство по синтаксису для реализации проекта AJAX - PullRequest
4 голосов
/ 12 мая 2011

Я беру свой первый проект AJAX и концептуально все по большей части наметил, но меня сдерживают из-за недостатка знаний синтаксически.Я думаю, что я также мог бы быть немного не в порядке с моей логикой структуры / функции.

Я ищу некоторые указания, хотя и ссылки на учебные пособия, или какие-либо исправления того, что я пропускаю или упускаю из виду.

profile.php: на этой странице есть фактический значок большого пальца, который нужно щелкнуть, и функция $.post:

Вот структура большого пальца.

Когда большой палецнажал, мне нужно отправить идентификатор комментария?Я знаю, что мне нужно вычислить тот факт, что на него как-то нажали, и отправить его в $.Поместить область внизу этой страницы, мне также нужно поместить некоторую переменную php в div счетчика большого пальца, чтобы увеличивать числа, когда $.Сообщение подтверждает, что на него нажали.

<div id="thumb_holder">
    <div id="thumb_report">
        <a href="mailto:info@cysticlife.org">
            report
        </a>
    </div>
    <div id="thumb_counter">
        +1
    </div>
    <div id="thumb_thumb">

        <?php $comment_id = $result['id'];?>
        <a class="myButtonLink" href="<?php echo $comment_id; ?>"></a>

    </div>
</div>

Вот функция $.post

Для этого нужно отправить идентификатор комментария?Но, безусловно, следует отправить запись о нажатой ссылке большого пальца и каким-то образом отправить ее на мою php-страницу, которая обращается к БД.

<script>
$.ajax({
 type: 'POST',
 url:" http://www.cysticlife.org/thumbs.php,"
 data: <?php echo $comment_id; ?>,
 success: success
 dataType: dataType
});
</script>

thumbs.php: это страница, на которой запрос на увеличениеотправил, когда щелкнул большой палец, а затем, в свою очередь, велел БД сохранить клик, на этой странице у меня пока ничего нет.Но я предполагаю, что будет передана запись клика с помощью функции $.post с другой страницы, которая синтаксически не имеет ни малейшего понятия о том, как это будет работать, а затем с помощью запроса на вставку переместит эту запись в базу данных.

Вот то, что таблица в БД имеет

У меня есть три строки: id, которые автоматически добавляются.comment_id, чтобы он знал, какой комментарий "понравился", и, наконец, likes, чтобы отслеживать количество больших пальцев.

1 Ответ

5 голосов
/ 12 мая 2011

По крайней мере, вы хорошо начали, все еще есть ошибки. Прежде всего, есть несколько основных принципов, к которым вы можете привыкнуть:

1) How to create a click event

Прежде всего, я вставил «2» в качестве ссылки.

<a class="myButtonLink" href="2">Vote Up!</a>

EDIT: на всякий случай, если JS отключен, это будет лучший вариант:

<a class="myButtonLink" href="voteup.php?id=2" id="2">Vote Up!</a>

Тогда JS:

$('.myButtonLink').click(function(e) {
  e.preventDefault();
  alert('the button has been clicked!');
});

e представляет событие, поэтому первое, что мы делаем после отправки, это отмена действия по умолчанию (перенаправление на «2»). Затем мы предупреждаем, что кнопка была нажата. Если это работает, мы можем перейти к следующему шагу.

2) Getting the ID value from the clicked link.

Внутри функции щелчка мы можем использовать $(this), это представление элемента, по которому щелкнули. jQuery предоставляет нам набор функций для получения атрибутов из данного элемента, это именно то, что нам нужно.

$('.myButtonLink').click(function(e) {
  e.preventDefault();

  var comment_id = $(this).attr('id');
  alert('We are upvoting comment with ID ' + comment_id);
});

Когда все идет хорошо, это должно предупредить «Мы голосуем за комментарий с ID 2». Итак, перейдем к следующему шагу!

3) Sending the Request

Это может быть более сложный шаг, если вы только начинаете работать с ajax / jquery. Вы должны знать, что данные, которые вы отправляете, могут быть строкой URL (param = foo & bar = test) или массивом javascript. В большинстве случаев вы будете работать со строкой URL, потому что вы запрашиваете файл. Также убедитесь, что вы используете относительные ссылки («ajax / upVote.php», а не «http://www.mysite.com/ajax/upVote.php').». Вот небольшой тестовый код:

$('.myButtonLink').click(function(e) {
  e.preventDefault();

  var comment_id = $(this).attr('id');

  $.ajax({
    type: 'POST',
    url: 'thumbs.php',
    data: 'comment_id=' + comment_id,
    success: function(msg) { alert(msg); }
});

dataType определяется автоматически, например, вы можете выбрать между ответом JSON (который может быть массивом с состоянием и ответом сообщения) или просто простым текстом. Давайте будем простыми и начнем с простого текста.

Этот скрипт выполняет вызов thumbs.php и отправку значения $ _POST ($ _POST ['comment_id'] = 2) вместе с этим запросом. Теперь на thumbs.php вы можете выполнить PHP-часть:

1) checking if the comment_id is valid
2) upvoting the comment
3) print the current amount of votes back to the screen (in thumbs.php)

Если вы напечатаете количество голосов обратно на экран, последний скрипт, который я вам дал, предупредит окно сообщения, содержащее количество голосов.

4) Returning an array of data with JSON

Чтобы получить правильный ответ на вашем экране, вы можете рассмотреть возможность отправки массива вроде:

$arr = array(
  'result' => 'success', // or 'error'
  'msg' => 'Error messag' // or: the amount of votes
)

Затем вы можете закодировать это с помощью функции php json_encode($arr). Тогда вы сможете получить более достойный ответ со своим сценарием, используя это:

$('.myButtonLink').click(function(e) {
  e.preventDefault();

  var comment_id = $(this).attr('id');

  $.ajax({
    type: 'POST',
    url: 'thumbs.php',
    data: 'comment_id=' + comment_id,
    success: function(data) {
      if(data.result == "error") {
        alert(data.msg);
      } else {
        alert('Your vote has been counted');
        $('#numvotes').html(data.msg);
      }
    }
});

Как вы можете видеть, мы используем (данные) вместо (msg), так как мы отправляем обратно набор данных. Массив в PHP ($ arr ['result']) можно прочитать как data.result. Сначала мы проверяем, каков результат (ошибка или успех), если это ошибка, мы предупреждаем отправленное сообщение (неправильное соединение с БД, неправильный идентификатор комментария, невозможность подсчета голосов и т. Д. И т. Д.) О результате В случае успеха мы предупреждаем, что голос подсчитан и помещаем (обновленное) число голосов в элемент div / span / other с идентификатором numvotes.

Надеюсь, это было полезно; -)

// edit: я заметил некоторые ошибки с тегами кода. Исправлена ​​первая часть «руководства».

...