🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ امیر ابوئی
مشکل ارتباط با فایل ajaxHandler
محسن موحد حل شده توسط محسن موحد

سلام و درود

ببخشید من یه مشکلی دارم که هرچی تست میکنم این کدم درخواستو به فایل ajaxHandler ارسال میکنه، هرچی بررسیش کردم مشکل و خطایی توش ندیدم ، امکانش هست بررسیش کنید ببینید جایی رو اشتباه وارد کردم که درخواست اصن به فایل مقصد نمیرسه یا نه همش درسته ؟

 

  <script>
    $(document).ready(function() {
      $('#addFolderBtn').click(function(e) {
        var input = $('input#addFolderInput');
        $.ajax({
          url: "process/ajaxHandler.php",
          method: "POST",
          data: {
            action: "addFolder",
            folderName: input.val()
          },
          success: function(response) {
            if (is_numeric(response)) {
              var newFolderId = response;
              $('<a href="?folder_id ="' + newFolderId.val() + '"><i class="fa fa-folder"></i>' + input.val() + '</a>').appendTo('ul.folders-list');
            } else {
              alert(response);
            }
          }
        });
      });
      $('#addTaskInput').on('keypress', function(e) {
        if (e.which == 13) {
          $.ajax({
            url: "process/ajaxHandler.php",
            method: "POST",
            data: {
              action: "addTask",
              foldeId: <?= $_GET['folder_id'] ?>,
              taskTitle: $('#addTaskInput').val()
            },
            success: function(response) {
              if (response == 1) {
                //
              } else {
                alert(response);
              }
            }
          });
        }
      });
    });
  </script>

سلام و احترام

لطفا فایلاتون رو کامل بزارید تا داخل سیستم خودم اجرا کنم کداتون رو

امیر صالحی ۱۶ اسفند ۱۳۹۹، ۲۱:۳۴

.

امیر ابوئی ۱۶ اسفند ۱۳۹۹، ۲۱:۴۲

سلام.

هم غلط املایی دارید هم در قسمت appendTo تگ li رو نذاشتید ابتدا و انتهای تگ a.

is_numeric جزو توابع PHP هست.

newFolderId یک متغیر هست و val() گرفتن ازش اشتباهه.

#folders-list رو بصورت آیدی نامگذاری کردید ولی در appendTo بعنوان کلاس استفاده کردید.

در قسمت addTaskInput تیکه کد PHP رو به این صورت بنویسید:

folderId: <?php echo $_GET['folder_id'] ?? 0 ?>,

تا اگر $_GET تعریف نشده بود، خطایی رخ نده و مقدار صفر جایگزین شده باشه.

ضمن اینکه این قسمت غلط املایی داشتید در تعریف متغیرها سمت ajaxHandler.

وقتی کد ajax مینویسید در قسمت PHP باید خروجی مناسب ارسال کنید تا با کدهای جاوااسکریپت بتونید تجزیه و تحلیلش کنید و نتیجه ی مناسب رو قرار بدید. با توجه به کدهای ajaxHandler.php خروجی‌های اضافه رو باید کامنت کنید:

//var_dump($_POST['folderName']);
//echo "I Get Ajax Request :))";

نباید چنتا خروجی بفرستید.

در قسمت case : addTask هم همینطور:

//echo "I Get Ajax Request :))";

در کد init.php ادرس دهی constants.php اشتباهه. چون خودش داخل فولدر bootstrap هست و شما دارید دوباره از همونجا آدرس میدید. بنابراین یا bootstrap رو حذف کنید یا BASE_PATH رو به ابتداش اضافه کنید:

include "constants.php";

 

نتیجه ی نهایی کد:

<script>
    $(document).ready(function() {
      $('#addFolderBtn').click(function(e) {
        var input = $('input#addFolderInput');
        $.ajax({
          url: "process/ajaxHandler.php",
          method: "POST",
          data: {
            action: "addFolder",
            folderName: input.val()
          },
          success: function(response) {
            if (response >= 1) {
              var newFolderId = response;
              $('<li><a href="?folder_id ="' + newFolderId + '"><i class="fa fa-folder"></i>' + input.val() + '</a></li>').appendTo('#folders-list');
            } else {
              alert(response);
            }
          }
        });
      });
      $('#addTaskInput').on('keypress', function(e) {
        if (e.which == 13) {
          $.ajax({
            url: "process/ajaxHandler.php",
            method: "POST",
            data: {
              action: "addTask",
              folderId: <?php echo $_GET['folder_id'] ?? 0 ?>,
              taskTitle: $('#addTaskInput').val()
            },
            success: function(response) {
              if (response == 1) {
                location.reload();
              } else {
                alert(response);
              }
            }
          });
        }
      });
      $('#addTaskInput').focus();
    });
  </script>

کد PHP:

<?php
include "../bootstrap/init.php";
if (!isAjaxRequest()) {
    diePage("Invalid Request!");
}
if (!isset($_POST['action']) || empty($_POST['action'])) {
    diePage("Invalid Action!");
}
//var_dump($_POST['folderName']);
//echo "I Get Ajax Request :))";
switch ($_POST['action']) {
    case "addFolder":
        if (!isset($_POST['folderName']) || strlen($_POST['folderName']) < 3) {
            echo "Folder name must be at least 3 characters";
            die();
        }
        echo addFolder($_POST['folderName']);
        break;
    case "addTask":
        $folderId = $_POST['folderId'];
        $taskTitle = $_POST['taskTitle'];
        //echo "I Get Ajax Request :))";
        if (!isset($folderId) || empty($folderId)) {
            echo "please choose your folder to add Task into it!";
            die();
        }
        if (!isset($taskTitle) || strlen($taskTitle) > 3) {
            echo "Task title must be at least 3 characters!";
            die();
        }
        echo addTask($taskTitle, $folderId);
        break;
    default:
        diePage("Invalid Request!");
}

 

 

 

بهترین پاسخ
محسن موحد ۱۷ اسفند ۱۳۹۹، ۰۹:۲۶

سپاس از پاسخ جامع و کامل تون :))

همه مشکلات رو برطرفش کردم و اون تیکه کدهای اضافی رو هم موقعی که بقیه رو کامنت کرده بودم برای تست اضافه کرده بودم که موقع ارسال همه اش رو از کامنتی در آوردم

ولی با اینحال الآن که همه کدهارو مشکل شون رو حل کردم و حتی در نهایت محض اطمنیان کدهای نهایی شمارو هم جایگزین کردم، ولی نمیدونم چرا باز درست کار نمیکنه، ارتباط با دیتابیس هم مشکلی نداره چون فرایند get و delete رو به درستی انجام میده!!

امیر ابوئی ۱۷ اسفند ۱۳۹۹، ۱۰:۰۷