رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشاهده مطالب به صورت AJAX در Yii
#1
سلام

استاد من نیاز دارم مقداری رو از یک اکشن هر 60 ثانیه دریافت کنم و با کمک AJAX در قسمتی از سایت نمایش بدم

ممنون میشم راهنمایی کنید چطوری میتونم از AJAX در Yii استفاده کنم و برای انجام این کار چطوری باید کد بنویسم
پاسخ
تشکر شده توسط:
#2
ارتباطی به Yii نداره با کمک جاوا اسکریپت و جی کوئری بصورت زیر میتونید بنویسید.
این ساده ترین شکل هستش، ممکنه متد ارسالتون متفاوت باشه یا دیتاهای مختلفی برای ارسال داشته باشید.
برای آشنایی بیشتر با نحوه استفاده از ajax با کمک jquery لینک زیر رو مطالعه کنید.
http://api.jquery.com/jquery.ajax/

setInterval(function () {
   $.ajax({
       url: "/controller/action"
   }).done(function (data) {
       $("body").html(data);
   });
}, 60000);
...
پاسخ
تشکر شده توسط: mehdi king , php
#3
ممنون از پاسختون .

من یکم زیادی jQuery واسم غریبه نمیدونم چرا ...

بطور مثال من در اکشنی یک متغیر یا آرایه دارم مثلا $post حالا در صفحه ای میخوام محتوا این $post را نمایش بدم که هر 1 دقیقه خودکار محتوا جدید $post به نمایش در بیاد

اگر لطف کنید برای این یک نمونه کد بدید ممنون میشم
پاسخ
تشکر شده توسط:
#4
بهتر بود کدهاتون رو میذاشتید تا تغییرات روی اونها انجام بشه. ولی در هر صورت میتونید کدهای زیر رو نسبت به پروژتون تغییر بدید.

در سمت سرور با yii1 کدهاتون بصورت زیر میتونه نوشته بشه.
class PostController extends Controller
{

   public function filters()
   {
       return array(
           'accessControl',
           'ajaxOnly + view'
       );
   }


   public function actionView()
   {
       header('Content-type: application/json');
       echo CJSON::encode(array(
           'text' => $post
       ));
       Yii::app()->end();
   }

}

در سمت کلاینت کدهای جاوا اسکریپت بصورت زیر میشه:
setInterval(function () {
  $.ajax({
      url: "/post/view"
  }).done(function (data) {
      $("#Post").html(data.text);
  });
}, 60000);

در مثال بالا با فرض اینکه شما اکشنی به نام view در کنترل post دارید کدی نوشته شده تا هر 60 ثانیه یه بار اکشن view صدا زده بشه و متن گرفته شده رو در داخل تگی با آی دی post قرار بده.

در صورتیکه نیاز بود بفرمایید در مورد کدها توضیح بدم.
...
پاسخ
تشکر شده توسط: mehdi king
#5
من یه مثال ساده میزنم خودتون تغییرش بدین. فرض کنید شما میخواین ساعت رو بصورت پویا نشون بدین. خوب یه اکشن توی کنترلر site میسازیم با این کد:
public function actionTime()
{
    if(!Yii::app()->request->isAjaxRequest) {
        Yii::app()->end();
    }
    echo date('l j F Y - H:i:s');
}

این اکشن که خیلی ساده است. داره میگه اگه درخواست AJAX نبود برو از برنامه بیرون. بعدش هم تاریخ و ساعت رو نمایش میده (که وقتی اجرا میشه که درخواست AJAX باشه).

حالا توی ویوی خودتون این کد رو بنویسید:
<div id="time">&nbsp;</div>

<?php Yii::app()->clientScript->registerScript('time', '
    setInterval(function() {
        $.ajax({
            url: "' . Yii::app()->createAbsoluteUrl('site/time') . '",
            success: function(data) {
                $("#time").html(data);
            }
        });
    }, 1000);
');

این کد هر 1000 میلی ثانیه (1 ثانیه) یه درخواست به اکشن time از کنترلر site میزنه و هر خروجی که ازش گرفت رو توی div با آیدی time قرار میده.
پاسخ
تشکر شده توسط: mehdi king
#6
بسیار ممنون از لطفتون خیلی کارم راه افتاد .


فقط یک سوال دیگه اگر ما در Action مون کد PHP زیر را داشته باشیم ( مربوط به Extension برای رسم نمودار ) چطوری میتونیم با AJAX این نمودار را به صفحه مورد نظر ارسال کنیم ؟

public function actionRadar()
{        
        $this->widget(
            'chartjs.widgets.ChRadar', 
            array(
                'width' => 600,
                'height' => 300,
                'htmlOptions' => array(),
                'labels' => array("January","February","March","April", "May"),
                'datasets' => array(
                    array(
                        "fillColor" => "rgba(220,220,220,0.5)",
                        "strokeColor" => "rgba(220,220,220,1)",
                        "pointColor" => "rgba(220,220,220,1)",
                        "pointStrokeColor" => "#ffffff",
                        "data" => array(5, 15, 50, 25, 35)
                    ),
                    array(
                        "fillColor" => "rgba(220,220,220,0.5)",
                        "strokeColor" => "rgba(220,220,220,1)",
                        "pointColor" => "rgba(220,220,220,1)",
                        "pointStrokeColor" => "#ffffff",
                        "data" => array(55, 50, 45, 30, 20)
                    )      
                ),
                'options' => array()
            )
        );
} 

و یا برای نمایش این نمودار در صفحه مورد نظر با AJAX چه راهی رو پیشنهاد میکنید .
پاسخ
تشکر شده توسط:
#7
میتونید خروجی همین متد رو بعنوان محتوای div موردنظر قرار بدین. راه بهتر استفاده از نمودارهای سمت کلاینت مثل Highcharts و... است. کافیه دیتای اونها رو اصلاح کنید.
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان