من با یه مشکل عجیب برخوردم در زمینه فراخوانی فایل php توسط ajax

سلام

من با یه مشکل عجیب برخوردم در زمینه فراخوانی فایل php توسط ajax

به خاطر این عجیب که هرمتنی داخل div که فراخوانی میشه بدرستی نمایش داده میشه الا اون قسمتی که من مد نظرم هست یعنی ajax داره کارش رو درست انجام میده فقط کدهای php که از لوکال اطلاعات رو دریافت میکنه نمایش داده نمیشه هیچ پیغامی هم نمایش داده نمیده در زمان اجرا نشدن کد .

درضمن خود کد های php هم به صورت مجزا تست شده و درست عمل میکنه .

خلاصه که هرکاری به ذهنم میرسیده انجام دادم . کدهای php :

        <div id="image_zoom" class="row">
          <?php foreach ($data as $row) { ?>
            <div class="col-lg-3 col-md-6  d-flex justify-content-center  mb-3">
              <figure>
                <a href="<?php echo $row['link']; ?>" class="d-block overflow-hidden rounded">
                  <img src="<?php echo $row['img']; ?>" class="img-fluid " alt="Macbook">
                </a>
                <figcaption>
                  <p class="text-center"><?php echo $row['name']; ?></p>
                </figcaption>
              </figure>
            </div>
          <?php } ?>
        </div>

و این هم کد های ajax

$("#nemonekar .Type-design").click(function() {
  $("#nemonekar .Type-design").find(".flip-box-front , .flip-box-back").removeClass("border border-secondary text-muted ");
  $("#Type-design-offer section").stop().fadeOut(0);

  var index =$(this).index();
  var section_selected = $("#Type-design-offer section").eq(index);

  var url ='http://localhost/test.rahsite.com/index/tab';
  var data = {'number':index};

  $.post(url,data,function (msg) {
    section_selected.html(msg);
  });
  section_selected.stop().fadeIn(500);
  $(this).find(".flip-box-front , .flip-box-back").addClass("border border-secondary text-muted ");
});

این کد html که قراره ajax جهت نمایش کد های php داخلش فراخوانی کند

<div id="Type-design-offer">
            <section class="Type-design-company  mb-5 mt-3 display-none ">

            </section>
            <section class="Type-design-company  mb-5 mt-3 display-none ">

            </section>
            <section class="Type-design-company  mb-5 mt-3 display-none ">

            </section>
        </div>
پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

سلام دوست عزیز سوال شما رو خوندم و روی سیستم خودم پیاده کردم ولی منظور شما دقیق متوجه نشدم .

مثلا روی کدوم تگ کلیک منه تا درخواست ارسال بشه شما توی کد هاتون  از رویداد کلیک روی #nemonekar استفاده کردین ولی همیچن تگی داخل کد ها پی اچ پی و اچ تی مل نیست.

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

سلام ممنون پاسخ دادین .

ببینید این کد کامل صفحه که قراره رویداد روش انجام بشه چون میخواستم شلوغ نشه نفرستادم حق باشماست.

<section id="nemonekar">
    <div class="container">
        <div class="row mt-3 mb-3">
            <div class="col-12">
                <P class="text-center ">جدیدترین وبسایت های طراحی شده</P>
            </div>
        </div>

        <div class="row mt-3 mb-3">
            <div class="Type-design col-md-4 d-flex justify-content-center  m-md-0 m-sm-2">
                <div class="Type-design-template">
                    <div class="flip-box bg-transparent cursor-pointer">
                        <div class="flip-box-inner">
                            <div class="flip-box-front bg-light shadow">
                                <span class="d-flex justify-content-center"><i class="fas fa-7x fa-building p-3 "></i></span>
                                <p class="text-center font-small"> سایت شرکتی</p>
                            </div>
                            <div  class="flip-box-back d-flex justify-content-center bg-light shadow">
                                <img  src="public\image\Type-design-company.jpg" alt="contract_management">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="Type-design col-md-4 d-flex justify-content-center  m-md-0 m-sm-2">
                <div class="Type-design-template">
                    <div class="flip-box bg-transparent cursor-pointer">
                        <div class="flip-box-inner">
                            <div class="flip-box-front bg-light shadow">
                                <span class="d-flex justify-content-center"><i class="fas fa-7x fa-shopping-basket p-3 "></i></span>
                                <p class="text-center font-small"> سایت فروشگاهی</p>
                            </div>
                            <div class="flip-box-back d-flex justify-content-center bg-light shadow">
                                <img src="public\image\Type-design-Store.jpg" alt="contract_management">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="Type-design col-md-4 d-flex justify-content-center  m-md-0 m-sm-2">
                <div class="Type-design-template">
                    <div class="flip-box bg-transparent cursor-pointer">
                        <div class="flip-box-inner">
                            <div class="flip-box-front bg-light shadow">
                                <span class="d-flex justify-content-center"><i class="fas fa-7x fa-user-tie p-3 "></i></span>
                                <p class="text-center font-small">سایت شخصی</p>
                            </div>
                            <div class="flip-box-back d-flex justify-content-center bg-light shadow">
                                <img src="public\image\Type-design-personal.jpg" alt="contract_management">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div id="Type-design-offer">
            <section class="Type-design-company  mb-5 mt-3 display-none ">

            </section>
            <section class="Type-design-company  mb-5 mt-3 display-none ">

            </section>
            <section class="Type-design-company  mb-5 mt-3 display-none ">

            </section>
        </div>
    </div>
</section>

من اینجا به جی کوئری گفتم زمانی که رو nemonekar .Type-design# کلیک شد بیا شماره div که کلیک شده رو با index مشخص کن بعد برو  (eq(indexاون section رو برام فراخوانی کن و دستورات php که این دستورات هست :

<div id="image_zoom" class="row">
  <?php foreach ($data as $row) { ?>
    <div class="col-lg-3 col-md-6  d-flex justify-content-center  mb-3">
      <figure>
        <a href="<?php echo $row['link']; ?>" class="d-block overflow-hidden rounded">
          <img src="<?php echo $row['img']; ?>" class="img-fluid " alt="Macbook">
        </a>
        <figcaption>
          <p class="text-center"><?php echo $row['name']; ?></p>
        </figcaption>
      </figure>
    </div>
  <?php } ?>
</div>

رو بزار تو اون section  مربوط به خودش حال اتفاقی که میفته اینه :

1- هیچ اروری نمایش نمیده 

2-هرچیزی که داخل ای دی image_zoom  باشه به درستی نمایش میده یعنی ajax داره کارش رو درست انجام میده .البته داخل تگ php نمایش نمیده یعنی مابین تگ php داخل ای دی که متن مینویسی رو نمایش نمیده .

3- درضمن فایل php هم به صورت مجزا تست شده ودرست عمل میکنه فقط موقع فراخوانی نمایش داده نمیشه

امیدوارم تونسته باشم سوالم رو درست بپرسم . میبخشید اگه اول کامل توضیح ندادم گفتم شاید نیاز نباشه و وقتتون گرفته نشه ...

بازم ممنون که پیگیر بودید.

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

در واقع شما می خواید که داده ها و تصاویر مر بوط به نوع سایت ها رو مثلا شخصی و یا  فروشگاهی بگیرید و نمایش بدهید .

اولا باید کد هاتون درست کار کنن .شما شماره هر div رو می فرستید به سرور ولی اصلا اون شماره رو نمی گیرید و همه ای تصاویر رو به response بر می گردونید.

بهتره به هر div یک id  بدید و سمت سرور ها بر اساس اون id داده رو به صفحه برگردونید.

من اینو متوجه شدم اگر منظور شما چیز دیگه ای من در خدمت شما هستم

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

بله درسته فرمودین من میخوام جی کوئری زمانی که روکلاس Type-design.  کلیک شد بیا شماره div که کلیک شده رو با که ()index . مشخص کن بعد برو(eq(index. اون section رو برام فراخوانی کن .هیچ درخواستی از این بابت به سرور ارسال نمیشه اینجا من این قسمت از فرمایش شما رو متوجه نشدم ،

(شما شماره هر div رو می فرستید به سرور ولی اصلا اون شماره رو نمی گیرید و همه ای تصاویر رو به response بر می گردونید )

اینجا من درخواستی به سرور ارسال نکردم  !جی کوئری که به واسطهajax میخواد دستور رو اجرا کنه همین.

این راه جواب داده ...

-بیشتر هدف من استفاده از ajax و عملکردش به عنوان نمونه بوده .این مطلب شما:

(بهتره به هر div یک id  بدید و سمت سرور ها بر اساس اون id داده رو به صفحه برگردونید. )

اجرا درسته دستور هست  متوجه شدم . 

من عذر خواهی میکنم اگه اول هدفم از اجرا این دستورات توضیح ندادم و شمار رو گمراه کردم .

ممنون از اینکه پیگیر هستین . وهمراهی میکنید ...

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

در واقع شما می خوا هید همه ای  تصاویر رو بگیرید و روی فرانت شرط بزارید که کدوم عکس متعلق به کدوم بخشه؟

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

بله من برای هر section  یک سری عکس در نظر گرفتم که از سرور قرار اجرا بشه و اجرا هم باید توسط ajax انجام بشه ، همین... 

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

دوست عزیز شما باید سمت این تغییرات رو انجام بدین

<?php
$number=$_POST['number'];

$data['items'] = [
    ['name'=>' row one','link'=>'testing lke','img'=>'img/ee.png'],
    ['name'=>' row two','link'=>'http','img'=>'img/ee.png'],
    ['name'=>' row three','link'=>'testing','img'=>'img/ee.png'],
];

?>

<div id="image_zoom" class="row">
    <?php foreach ($data['items'] as $index => $row) { ?>
		<?php if($index==$number): ?>
        <div class="col-lg-3 col-md-6  d-flex justify-content-center  mb-3" data-content="<?=$index ?>">
            <figure>
                <a href="<?php echo $row['link']; ?>" class="d-block overflow-hidden rounded">
                    <img src="<?php echo $row['img']; ?>" class="img-fluid " alt="Macbook">
                </a>
                <figcaption>
                    <p class="text-center"><?php echo $row['name']; ?></p>
                </figcaption>
            </figure>
        </div>
		<?php endif ?>
    <?php } ?>
</div>
sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

مهندس اسمعیلی عزیز ممنون که زحمت کشید این کدها رو نوشتین درواقع این روشی هست که برای فراخوانی و تعلقشون به هربخش هست و صحیح هم هست .

ولی بحث من این نیست...

بنده خدمتتون عرض کردم که من میخوام به چه صورت درخواست اجرا بشود .

از خیلی از روش ها میتونستم به این خواستم برسم ولی صرفا میخوام از طریق ajax انجام بشه و section  مربوطه فراخوانی بشه .

کار تشخیص اینکه روی کدوم لینک کلیک شده و کدوم section   باید باز بشه به عهده جی کوئری هست و همانطور هم که خدمدتون عرض کردم جی کوئری هم به درستی داره این کار رو انجام میده و این موضع تست شده و بعد کلیک مطلب خواست شده به درستی نمایش داده میشه .

مشکل من عدم نمایش فایل php هست که قراره اطلاعات رو از سرور بگیره و نمایش بده که همانطور هم که بازم قبلا خدمتتون عرض کرده بودم این کار هم در در همین برنامه بدون ajax تست شده و نتیجه دلخواه من رو نمایش داده .

من راه جایگزین و یا روش انجام این کار رو ازتون نخواستم .

من میخواستم بدونم کجای این کدی که نوشتم ایراد داره که اون کاری رو که ازش میخوام رو انجام نمیده .

-----------------------------------------------------------------------------

مهندس عزیز به یه نکته برخوردم با افرودن کد error نمایش دیتابیس :mysqli_connect_errore

که البته داخل if گذاشتم داخل همون کد php که قراره فراخوانی بشه که نمیدونم ارتباطی داشته باشه یا نه ولی الان هم وقتی داخل خود section  چیزی نمایش  نمیده و error :

<b>Fatal error</b>:  Uncaught Error: Call to undefined function mysqli_connect_errore() in C:\xampp\htdocs\test.rahsite.com\views\index\tab1.php:2
Stack trace:
#0 C:\xampp\htdocs\test.rahsite.com\core\controller.php(13): require()
#1 C:\xampp\htdocs\test.rahsite.com\controllers\index.php(17): Controller-&gt;view('index/tab1', Array, 1, 1)
#2 C:\xampp\htdocs\test.rahsite.com\core\app.php(29): index-&gt;tab()
#3 C:\xampp\htdocs\test.rahsite.com\index.php(5): App-&gt;__construct()
#4 {main}
  thrown in <b>C:\xampp\htdocs\test.rahsite.com\views\index\tab1.php</b> on line <b>2</b><br />

و با گذاشتن error_reporting:

<b>Warning</b>:  Use of undefined constant error_reporting - assumed 'error_reporting' (this will throw an Error in a future version of PHP) in <b>C:\xampp\htdocs\test.rahsite.com\views\index\tab1.php</b> on line <b>4</b><br />
error_reporting  
sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

جواب رو با کمک شما پیدا کردم

درواقع شما درست میگفتین :

(اولا باید کد هاتون درست کار کنن .شما شماره هر div رو می فرستید به سرور ولی اصلا اون شماره رو نمی گیرید و همه ای تصاویر رو به response بر می گردونید. )

من view رو فراخوانی کرده بودم تو اونجایی که ajax داشت میخوند اطلاعات رو ،

ولی باید data رو هم به صورت مستقل برای view پاس میدادم . من فکر میکردم چون تو اون صفحه فراخوانی شده دیگه نیازی به فراخوانی مجدد نباشه .و این اشتباه مسخره رو مرتکب شدم .

ازشما عذر خواهی میکنم و ممنونم ...

<?php
class index extends Controller
{
	public $var1 = 'click site';
	function __construct() {
		//		echo 'salam';
	}
	function index() {
		$result= $this->model->getProduct();
		$this->view( 'index/index',$result );
	}
	function tab()
	{
		$number = $_POST['number'];
	if ($number==0) {
 $nemonekar= $this->model->getProduct();
		$this->view( 'index/tab1',$nemonekar,1,1);
	}
	}
}

کد اصلاح شده ...

online-support-icon