با سلام خدمت استاد گرامی
توی ویدیو گفتید که روشی رو برای پیاده سازی قابلیت ایجاد فولدر و لیست کردن فولدر ها به صورت ایجکس انجام بدیم.
من به این روش انجام دادم و به راحتی کار کرد.
درخواست ajax:
$(document).ready(function() {
var inputAddFolder = $("#addFolderInput");
$(".addFolderbtn").click(function() {
$.ajax({
url: "process/ajaxHandler.php",
method: "POST",
data: {
action: "addFolder",
folderName: inputAddFolder.val()
},
success: function(response) {
// alert(response);
$("#foldersList").html(response);
}
})
})
})
swich در فایل ajaxHandler.php
switch ($_POST['action']) {
case "addFolder":
if (strlen($_POST["folderName"]) < 3) {
echo "نام فولدر حداق باید دارای 3 حرف باشد.";
} else {
addFolder($_POST['folderName']);
ajaxFolders();
}
break;
default:
diePage("Invalid Action!");
}
تعریف تابع ajaxFolders در lib-task.php
function getFolders()
{
global $pdo;
$userId = getCurrentUserID();
$sql = "SELECT * FROM folders WHERE user_id = $userId";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$records = $stmt->fetchAll(PDO::FETCH_OBJ);
return $records;
}
function ajaxFolders()
{
$folders = getFolders();
foreach ($folders as $folder) { ?>
<li>
<a href="?folder_id=<?= $folder->id ?>"><i class="fa fa-folder"></i><?= $folder->name ?></a>
<a href="?delete_folder=<?= $folder->id ?>"><i class="fa fa-times removeFolderBtn"></i></a>
</li>
<?php
}
}
به این شکل که مجدد تمام لیست فولدرها با اطلاعات و لینک هاشون کامل به صورت ایجکس لود میشن.
به نظر شما استفاده از این روش مشکلی نداره؟
سلام
من مشکل خاصی نمی بینم
شاید نامگذاری تابع Ajax Folders می تونه بهتر باشه.
ضمنا لیست فولدر ها می تونه در قالب یه Json به کلاینت داده بشه که اونجا با js نمایششون بده ?
سلام استاد
کاری که گفتید را انجام دادم فقط جواب آخری رو با یک Json به کلاینت برگردوندم و با js به آخرین سطر فولدر ها اضافه کردم.
جسارتا این مراحلی که رفتم درست بوده؟
۱- اول برای جواب بازگشتی تابع addFolder آیدی آخرین سطر ست شده برای جدول Folders رو ست کردم.
function addFolder($folderName)
{
global $pdo;
$userId = getCurrentUserID();
$sql = "INSERT INTO folders (name,user_id) VALUES (:folderName , :user_id)";
$stmt = $pdo->prepare($sql);
$stmt->execute([":folderName" => $folderName, ":user_id" => $userId]);
$records = $pdo->lastInsertId();
return $records;
}
۲- بعدش تابع addNewFolderRow را تعریف کردم که آیدی رو بهش پاس بدم و اطلاعاتی مربوط به اون سطر رو که میخوام رو بتونم دریافت کنم.(در اصل برای اینجا نیاز به تعریف این تابع نبود چون میشد همون id رو از تابع بالایی گرفت و استفاده کرد و برای اسم فولدر هم از input.val استفاده کرد. اما هدف من این بود که برای جایی مثل سطر های تسک ها که زمان و,‘,, هم دریافت میکنیم این تابع به کارمون بیاد.’)
function addNewFolderRow($lastInsertFolderId)
{
global $pdo;
$userId = getCurrentUserID();
$sql = "SELECT id,name FROM folders WHERE id = :lastAddId AND user_id = :user_id";
$stmt = $pdo->prepare($sql);
$stmt->execute([":lastAddId" => $lastInsertFolderId, ":user_id" => $userId]);
$records = $stmt->fetchAll(PDO::FETCH_OBJ);
return $records;
}
۳- بعد در ساختار switch اول نام رو پاس دادم به تابع اولی بعدش id بازگشتی رو پاس دادم به تابع دومی و به صورت object json با استفاده از تابع json_encode جواب رو با echo برگردوندم به ajax (زمانی که میخواهیم یک json را برگردانیم در جواب ajax باید به این شکل (echo) چاپش کنیم؟)
switch ($_POST['action']) {
case "addFolder":
if (strlen($_POST["folderName"]) < 3) {
echo "نام فولدر حداق باید دارای 3 حرف باشد.";
} else {
$lasInsertId = addFolder($_POST['folderName']);
echo json_encode(addNewFolderRow($lasInsertId));
}
break;
default:
diePage("Invalid Action!");
}
۴-در مرحله آخر هم با استفاده از jquery و درقالب درخواست ajax اون رو تعریف کردم و datatype رو روی Json ست کردم.
$(document).ready(function() {
var inputAddFolder = $("#addFolderInput");
$(".addFolderbtn").click(function() {
$.ajax({
url: "process/ajaxHandler.php",
method: "POST",
dataType: "JSON",
data: {
action: "addFolder",
folderName: inputAddFolder.val()
},
success: function(response) {
var addFolderID = response[0].id;
var addFoldername = response[0].name;
var folderRow = "<li><a href='?folder_id=" + addFolderID + "'><i class='fa fa-folder'></i>" + addFoldername + "</a>" +
"<a href='?delete_folder=" + addFolderID + "'><i class='fa fa-times removeFolderBtn'></i></a></li>";
$("#foldersList").append(folderRow)
inputAddFolder.val('');
}
})
})
})
و در آخرین سوال من اینکه از همین روش میشه برای اضافه و حذف کردن تسک ها و همین طور فولدر ها برای انتخاب یا حذفشون استفاده کرد؟