我试图通过在PHP页面中使用alert来显示来电,因为我需要每隔一秒检查一次来电是否存在。
Ajax:
function checkPushTask()
{
var idleTimer = null;
$.ajax({
type: "POST",
url: "<?php echo CController::createUrl('/site/checkPushTask'); ?>",
async:true,
success: function(msg){
if(msg != -1)
{
if (idleTimer != null)
window.clearTimeout(idleTimer);
$(".TaskDisplay").html(msg);
idleTimer = setTimeout(checkPushTask, 3000);
}
},
error: function(){
}
});
}
checkPushTask();
控制器操作:
public function actioncheckPushTask()
{
$criteria = new CDbCriteria();
$criteria->alias = 'qws';
$criteria->join = 'inner join crm_base_contact on crm_base_contact.crm_base_contact_id = qws.crm_base_contact_id';
$criteria->condition = 'qws.crm_base_contact_id in (Select crm_base_contact_id from crm_campaign where is_active = 1 and status < 2 and crm_campaign_id in
(select crm_campaign_id from crm_campaign_agent where g_user_id = '.yii::app()->user->getUserID().'))';
$count = QueryWSModel::model()->count($criteria);
if ($count > 0)
{
$cuser = CRMUser::model()->findByAttributes(array('g_user_id'=>yii::app()->user->getUserID()));
$pendingmodel = PendingTaskModel::model()->find(array( 'condition' => 'FIND_IN_SET(:QueryWS_agent_id,QueryWS_agent_id)',
'params' => array( ':QueryWS_agent_id' => yii::app()->user->getUserID())));
if (sizeof($pendingmodel) > 0 && $cuser['current_task_id'] == null)
{
$user = Yii::app()->getComponent('user');
$user->setFlash(
'info',
CHtml::link('Incoming Call: OpenTask #'.$pendingmodel->crm_task_id,$this->createUrl('operator/TaskOpen',array('id'=>$pendingmodel->crm_task_id)),array('style'=>"color:white"))
);
ob_start();
$this->widget('bootstrap.widgets.TbAlert', array(
'fade' => true,
'closeText' => '×', // false equals no close link
'events' => array(),
'htmlOptions' => array(),
'alerts' => array(
'info' => array('closeText' => '×'),
),
));
$tab1Content= ob_get_contents();
ob_end_clean();
echo $tab1Content;
}
}
else
echo -1;
}
以上查询占用CPU使用率高,请任何人指导我减少CPU负载!!
答案 0 :(得分:0)
条件idleTimer != null
永远不会满足。将变量idleTimer
移出函数作用域,因此每次执行函数时都不会创建变量(并初始化为null
)。就这样:
var idleTimer = null;
function checkPushTask()
{
$.ajax({
type: "POST",
url: "<?php echo CController::createUrl('/site/checkPushTask'); ?>",
async:true,
success: function(msg){
if(msg != -1)
{
if (idleTimer != null)
window.clearTimeout(idleTimer);
$(".TaskDisplay").html(msg);
idleTimer = setTimeout(checkPushTask, 3000);
}
},
error: function(){
}
});
}
checkPushTask();