Jump to content
  • 0

Нужен совет по AJAX


Fastfold
 Share

Question

Здравствуйте,сразу прошу прощения за мою орфаграфию. Ну так вот, недавно передомной появилась задача сделать небольшое веб-приложение с использованием таких технологий как: PHP, MySql [ PDO или MySqli ], AJAX [ например JQUERY ], JSON.

Посколько раньше я не когда не сталкивался с JS, прошу совета или помощи у вас. Привиду пример, чтобы было понятнее. :)

Представим страницу на которой выводится:

  • Форма добавления задачи
  • Задачи со статусом ( например завершена и незавершена )
  • И счетчик количества задач.

PS. Так же на странице должна быть возможность удалить задачу, изминить статус задачи. И все изменения должны сразу отображатся.

Как все это реализовать с использованием PHP и MySql понятно,но как все это сделать без перезагрузки страница возникают проблемы. Вот такой небольшой вымышленный пример. Я даже нашел что-что похожее в интернете ( сыллка). Но там, слишком все неясно.

Может кто подскажет, что дельное как это реализовать и в сторону каких функций jquery смотреть.Если покажите примеры, цены вам не будет, спасибо большое. :D

Edited by Fastfold
Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0
Как все это реализовать с использованием PHP и MySql понятно,но как все это сделать без перезагрузки страница возникают проблемы

Всё точно также. Единственное для транспортировки используется Аякс.

Если у вас в программировании вобще никаких знаний нет, то долго объяснять. Если нет, то - сами разберётесь))

вот документация http://jquery-docs.ru/Ajax/

Аякс - это транспорт. Т.е. вы отправляете запрос к скрипту или странице, и т.д. Получаете в ответ данные и вставляете их к себе на страницу.

В Аяксе используются POST и GET запросы), JSON используется для передачи массивов.

С помощью Аякса - практически невозможно получить информацию с другого домена, без спец. разрешения, из за политики безопасности. Только связка Аякс и Curl.

Ещё в инструментарии аякса есть метод load()(не путать с одноименной функцией ожидания загрузки ). Он хорош своей простотой. Берет страницу, напрямую парсит её и вставляет нужные данные. удобно , но долго.

Мой вам совет. Если вы в PHP разбираетесь, сделайте с начала прототип - как вы видите это без JS, дальше видно будет

Link to comment
Share on other sites

  • 0

Например создал я класс, с функцией get_completed в которой получаем информацию их базы данных.


class Tasks {
private $db;

public function __construct($database) {
$this->db = $database;
}

public function get_completed() {
$query = $this->db->prepare("SELECT * FROM `list` WHERE `status` = 0");
try {
$query->execute();
}
catch(PDOException $e) {
die($e->getMessage());
}
return $query->fetchAll(PDO::FETCH_ASSOC);
}

В файл init.php поместил инициализацию класса.


<?php
require_once 'config/database.php';
require_once 'classes/tasks.inc.php';

$tasks = new Tasks($db);
?>

В файле json.php перевожу данные в формат нужный формат.


<?php
require_once 'core/init.php';
$completed = $tasks -> get_completed();
echo json_encode($completed);
?>

В myscript.js привожу все в читабельный вид.


$(document).ready(function() {
$('#show-records').click(function() {
$.post('json.php', function(data) {
var pushedData = jQuery.parseJSON(data);
var htmldata = "";
$.each(pushedData, function(i, serverData) {
htmldata = htmldata + serverData.name + "Status: " + serverData.status + " Date:" + serverData.date + "<br/>";
});
$('#show-list').html(htmldata);
});
});
});

Правильно ли я начал делать, и как это вывести в html таблице ?

Edited by Fastfold
Link to comment
Share on other sites

  • 0

ну скажем нужно вам проверить статус по клику, выглядеть это будет так:

1) Кликаете мышкой на какой то элемент

2) По событию клика JS обращается к серверу(какой то странице + можно передать GET или POST)

3) Получаем данные хоть в json хоть просто в html хоть как это зависит от того какие данные отдаст ваша страница(PHP) + желательно заголовки правильные прописать для json

4) Полученные данные обрабатываем и выводим на страницу.

Вот простой пример:

У нас есть 2 файла на сервере index.html - страница где все выводится и некий status.php нам надо по клику получить информацию из status.php и вывести ее в h1#main

index.html


<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Тест</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>

<h1 id="main">Я тут!</h1>

<div id="click">кликни</div>


<script type="text/javascript">
// присваиваем событие клика
$(document).on('click', '#click', function()
{
// получаем данные из status.php и записываем их в элемент с ID main, причем при получении мы попутно отправим данные методом POST
$('#main').load('status.php', { str: 'getStatus' } );

return false;
});

</script>
</body>
</html>


<?php

echo isset($_POST['str']) ? $_POST['str'] : 'ошибка';

я для простоты использовал Jquery но думаю главное это идея и она ясна... Так же я не рассматривал вариант с json данными но там не намного сложнее просто при получении нужно будет разбирать полученные данные, в jquery для асинхронных запросов много функций .ajax .get .post .load

Edited by stars
Link to comment
Share on other sites

  • 0

$.post("http://mysite.ru/test.php",//адрес запроса
$('#myForm').serialize(),//post данные берем из формы с помощью метода .serialize() на выходе получается строка вида "key=value&key=value"
function(data) {//функция которая примет ответ и обработает его. data это уже объект инициированный из JSON строки ответа
},
"json"//указываем что ответ будет в JSON
);

Edited by wwt
Link to comment
Share on other sites

  • 0

В myscript.js привожу все в читабельный вид.


$(document).ready(function() {
$('#show-records').click(function() {
$.post('json.php', function(data) {
var pushedData = jQuery.parseJSON(data);
var htmldata = "";
$.each(pushedData, function(i, serverData) {
htmldata = htmldata + serverData.name + "Status: " + serverData.status + " Date:" + serverData.date + "<br/>";
});
$('#show-list').html(htmldata);
});
});
});

Правильно ли я начал делать, и как это вывести в html таблице ?

все верно, вы получили некий массив вам нужно пройти по массиву(что вы и делаете) и присваивать значения нужным ячейкам... Например у вас некий таск лист


<table>
<tr id="$n">
<td class="status">.......</td>
</tr>
.....
</table>


$.each(pushedData, function(i, serverData) {
htmldata = htmldata + serverData.name + "Status: " + serverData.status + " Date:" + serverData.date + "<br/>";
$('#' + id + ' td.status').html(htmldata);
});

Link to comment
Share on other sites

  • 0

Не могу сообразить, что-то. (myscript.js)

PS. При вставке html тэгов например "<tr><td>" + serverData.name + "<td/></tr>" то вообще не работает.


$(document).ready(function() {
$('#show-records').click(function() {
$.post('json.php', function(data) {
var pushedData = jQuery.parseJSON(data);
var htmldata = "";
$.each(pushedData, function(i, serverData) {
htmldata = htmldata + serverData.name + serverData.status + serverData.date + "<br />";
$('#show').html(htmldata);
});
});
});
});

HTML


<table class="table table-striped">
<thead>
<tr>
<th>Task</th>
<th>Status</th>
<th>Date</th>
<th></th>
</tr>
</thead>
<tbody>
<?php
foreach ($completed as $task) {
echo "<tr><td>".$task['name']."</td><td>".$tasks->get_status($task['status'])."</td>"."<td>".$tasks->get_date($task['date'])."</td><td>Removed</td></tr>";
}
?>
</tbody>
</table>
<hr>
<table class="table table-striped">
<thead>
<tr>
<th>Task</th>
<th>Status</th>
<th>Date</th>
<th></th>
</tr>
</thead>
<tbody>
<tr id="show"></tr>
</tbody>
</table>

База данных

75179da963495f62361846f88748e548.png

Вывод данных. Первая таблица это вывод php,тоже самое нужно сделать на JS.

Снизу это то что мне удалось вывести на данный момент ( файл myscript.js )

014787a40717d0d76d6da87890ed8a6d.png

PS. Для преобразования даты и статуса я сделал две функций. Но как такое осуществить при выводе на JS ?


public function get_status($status) {
$array = array( "Completed", "Incomplete", "Removed" );
if (isset($status)) {
return $array[$status];
}
else {
return false;
}
}
public function get_date($date) {
if (isset($date)) {
return date('j.m.y', $date);
}
else {
return false;
}
}

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

Edited by Fastfold
Link to comment
Share on other sites

  • 0

если вы никогда не работали с JS, то учитесь пользоваться консолью браузера)) она не заменима и показывает все ошибки.

у вас тривиально простая задача, но делаете вы её как то криво =) завтра буду на работе гляну

Да и смотрите - раньше JS разработчики использовали для отладки alert() но алерты - тоже не все показывают - например ассоциативные массивы - нет.

Но jQuery подружила их с консолью.

проверяйте то что на выходе у вас в консоли console.log(data)

тогда вы сразу увидите что не так... и как вообще ваши ассоциативные массивы разобрать :)

в хроме её можно открыть : shift+ ctrl+j, либо F12

Edited by Николя223
Link to comment
Share on other sites

  • 0

Вот криво, я так и думал :D

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

Я бы хоть увидел, как это надо делать верно)

Edited by Fastfold
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By РоманФ
      Возникли сложности с созданием нестандартной формы в конструкторе сайтов, может кто-то сталкивался с такими проблемами?
      Как решать такие проблемы в конструкторах по типу Lp Motor и Tilda(есть блок html есть куда вставить css, ну и соответственно есть возможность вставлять скрипты js), что использовать и как отправлять формы на почту в такой ситуации?
       
    • By toplife
      Интернет-маркетинговое агентство Top-Life. Мы ищем в команду Junior Web разработчика.
       
      Что мы ожидаем от кандидата:
      Навыки HTML5, CSS3, JavaScript; Знания PHP5-7‚ MySQL‚ jQuery, ajax; Опыт в верстке; Наличие опыта разработки и знание различных CMS (1С Битрикс, UMI, ModX, WordPress и другие) будет плюсом; Опыт работы и наличие портфолио приветствуется; Умение и желание работать в команде; Аккуратность (осмысленность) в работе.  
      Задачи, которые вам предстоит решать:
      Современная адаптивная кроссбраузерная верстка (HTML5+CSS3); Применение готовой верстки к CMS (1С-Битрикс, Wordpress);  
      Условия:
      Оформление по ТК РФ Заработная плата: от 20 000 до 40 000 руб;  График работы: 5/2 с 10.00–19.00, обед с 14.00–15.00; На территории работодателя; Молодой‚ профессиональный коллектив; Корпоративные мероприятия; Чай, кофе и печеньки с нас; Мы даем возможность не просто работать‚ а создавать и развиваться. Для связи:
      Антон
      тел: 8(981)897-42-46
      mail: a.majstrenko@top-life.su
      hh: https://spb.hh.ru/vacancy/30397980
    • By Olesiy
      Здравствуйте дорогие форумчане! Сделала всплывающую форму обратной связи на своем сайте, все работает,нормально, вот только после отправки письма форма не закрывается, нужно нажимать на крестик для закрытия. Как сделать так , что бы после успешной отправки форма сама закрывалась.Если кому не трудно подскажите ПОЖАЛУЙСТА. P.S в js не буб бум.
      Вот форма:
      <div class="popup"> <div class="popup-dialog">  <div class="popup-content">  <button class="popup-close"> &times;</button> <form  class="top" action="smart.php" method="POST"> <h4>Submit your application</h4> <label for="name"> Your  name<input type="text" name="name" value="" placeholder="name"></label> <label for="emeil"> Your e-meil<input type="text" name="e-meil" value="" placeholder="emeil" required></label> <label for="phone">Your Phone<input type="text" name="phone"  id="phone" value="" placeholder="phone"></label> <textarea name="comment" id="comment-field"  rows="4">comment</textarea> <button class="button-block button-btn" type="submit">  to order</button> </form> </div> </div> </div>  
      Вот скрипт отправки:
      $('form').submit(function(event) { event.preventDefault(); var th = $(this); $.ajax({ type: "POST", url: "smart.php", data:$(this).serialize() }).done(function() { $(this).find("input").val(""); alert("Спасибо за заявку!"); $("form").trigger("reset"); }); return false; }); И на всякий случай скрипт всплытия окна
      $(document).ready(function() { $('.popup-btn').on('click', function (event) { $('.popup').fadeIn();// к тому что нужно показать, fadeIn с анимацией }); $('.popup-close').on('click', function (event) { event.preventDefault(); $('.popup').fadeOut(); }); })  
    • By Лелик
      Очень нужен фильтр товаров на ajax без БД. В интернете нашла подходящий пример. Могу провести всю рутинную работу (коей очень много) по наполнению фильтра. Есть проблемы:
      1. не знаю, как проверить его на ошибки, и
      2. не знаю, как встроить в сайт
      Прошу провести эти две работы. Для заинтересованного программиста пришлю более подробное описание ТЗ
    • By somik
      Ребята кто практикует верстку или дизайн адаптивный рисует.
      Верстаю сайт и мне не дали PSD  адаптивной верстки.
      Подскажите, как бы вы сверстали слайдер и блоки в нем для телефонов?
      Смотреть на компьютере.
      http://taxiautopa.temp.swtest.ru/
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy