PDA

View Full Version : مشکل با pjax



masiha68
دوشنبه 30 آذر 1394, 17:37 عصر
سلام دوستان
وقتی با اجاکس کار می کنیم میشه دقیقا معلوم کرد اطلاعات برگشتی توی کدوم div نشون داده بشن ولی با pjax چجوری این کارو می کنن :)

الان مثلا میخام اطلاعات برگشتی توی تگ show-list نشون داده بشن

<?php

use yii\helpers\Html;


use yii\widgets\Pjax;
Pjax::begin(['timeout'=>false,'enablePushState'=>false]);
?>

<?php
foreach($memoryslist as $list):

?>

<li><a class="btn" href="<?php echo Yii::$app->urlManager->createAbsoluteUrl(['memorys/showmemorys','id'=>$list->id]) ;?>"> <?= $list->title?></a></li>
<?php endforeach ;
Pjax::end();
?>
<div id="show-list"></div>

masiha68
سه شنبه 08 دی 1394, 15:22 عصر
برای این کار باید ای دی پیجکس رو با ای دی تگ مورد نظر یکی قرار بدی ...

mohamadali1374
یک شنبه 08 فروردین 1395, 03:54 صبح
سلام
من id رو تغییر دادم ولی همچنان نتیجه در div مورد نظر نشون داده نمیشه ...
لطفا کمک کنید:


use yii\helpers\Html;


use yii\widgets\Pjax;
Pjax::begin(['id'=>'show-list','timeout' => false, 'enablePushState' => false]) ;
$form= ActiveForm::begin([
'action'=>['project/test'],
'enableClientValidation'=>false,
'options'=>['enctype'=>'multipart/form-data','data-pjax'=>'']
]);



echo $form->field($models,'dataest');


ActiveForm::end();
Pjax::end();
?>
<div id="show-list"></div>

masiha68
یک شنبه 08 فروردین 1395, 04:00 صبح
مشکل بزرگ پیجکس اینه که وقتی ازش استفاده می کنی به صورت یک وجکت عمل می کنه و وقتی ای دی پیجکس رو مثلا p11 میزاری دور تگ پیجکس یه div با ای دی p11 ایجاد میشه واسه همین بیشتر وقتا سیستم درست کار نمی کنه
واسه حل این مشکل اومدم و یه کامپونتت بر اساس پیجکس و اجاکس نوشتم تا مشکل حل بشه
البته واقعا نتونستم راهی پیدا کنم تا تگ دور پیجکس رو حذف کنم

حالا اگه مایل باشید کد رو می زارم

mohamadali1374
یک شنبه 08 فروردین 1395, 04:13 صبح
سلام
خیلی ممنون
اگر براتون زحمتی نیست لطف میکنید کد رو بزارید؟
من واقعیت خیلی توی سایت های خارجی گشتم و همونجور که گفتید راه حلی پیدا نکردم .
واقعیت کد نویسی ajax زیاد جالب نیست به همین خاطر میخوام با pjax کار کنم.
امیدوارم که مشکل حل بشه بازم ممنون

masiha68
یک شنبه 08 فروردین 1395, 04:27 صبح
<?php

namespace common\widgets;
use Yii;

use yii\widgets\Pjax;
use yii\widgets\PjaxAsset;

class myPjax extends Pjax{
public $enablePushState = false;
/**
* @var boolean whether to enable replace state.
*/
/**
* @var integer pjax timeout setting (in milliseconds). This timeout is used when making AJAX requests.
* Use a bigger number if your server is slow. If the server does not respond within the timeout,
* a full page load will be triggered.
*/
public $timeout = 50000000000;
public $ajaxLink=false;
public $ajaxForm=false;
public $ajaxFormUpload=false;
public $multiAjaxLink=false;
public $params=[];

function init()
{
if($this->ajaxLink==true)
{
$this->Link($this->params);

}
if($this->ajaxForm==true)
{
$this->ajaxForm($this->params);

}
if($this->ajaxFormUpload==true)
{
$this->ajaxFormUpload($this->params);

}
if($this->multiAjaxLink==true)
{
$this->multiLink($this->params);

}
parent::init();
}

public function Link()

{
$id=$this->params['id'];
$url=$this->params['url'];
$dviId=$this->params['divId'];
if(isset($this->params['confirm'])) {
$confirm = "if(confirm('".$this->params['confirm']."')){";
$endConfirm = "}";
}
else
{
$confirm = "";
$endConfirm = "";
}
$url=Yii::$app->urlManager->createAbsoluteUrl($url);
$js2="$('#".$id."').on('click', function() {".$confirm."$.ajax({url: '".$url."',type: 'POST',beforeSend: function(){ $('body').addClass('wait');},complete: function(){ $('body').removeClass('wait');},success : function(res){ $('#".$dviId."').html(res);}});".$endConfirm."});";

$view = $this->getView();
PjaxAsset::register($view);

if ($js2 !== '') {
$view->registerJs($js2);
}
return ;
}
public function multiLink()
{
foreach($this->params as $value=>$key):
$id=$key['id'];
$url=$key['url'];
$dviId=$key['divId'];
if(isset($key['confirm'])) {
$confirm = "if(confirm('".$key['confirm']."')){";
$endConfirm = "}";
}
else
{
$confirm = "";
$endConfirm = "";
}
$url=Yii::$app->urlManager->createAbsoluteUrl($url);
$js2="$('#".$id."').on('click', function() {".$confirm."$.ajax({url: '".$url."',type: 'POST',beforeSend: function(){ $('body').addClass('wait');},complete: function(){ $('body').removeClass('wait');},success : function(res){ $('#".$dviId."').html(res);}});".$endConfirm."});";


$view = $this->getView();
PjaxAsset::register($view);


$view->registerJs($js2);
endforeach;

return ;
}
public function ajaxForm()
{

$form_id=$this->params['id'];

$divId=$this->params['divId'];
$url=Yii::$app->urlManager->createAbsoluteUrl($this->params['url']);


$js2=" $('#$form_id').submit(function(e){ $.ajax({url : '$url',type: 'POST',data : $(this).serializeArray(),beforeSend: function(){ $('body').addClass('wait');},complete: function(){ $('body').removeClass('wait');},success:function(r es){ $('#$divId').html(res);$('#$form_id').trigger('res et');}});e.preventDefault();e.unbind();});";


$view = $this->getView();
PjaxAsset::register($view);
$view->registerJs($js2);

return ;

}
public function ajaxFormUpload()
{

$form_id=$this->params['id'];

$divId=$this->params['divId'];
$url=Yii::$app->urlManager->createAbsoluteUrl($this->params['url']);


$js2=" $('#$form_id').submit(function(e){ $.ajax({url : '$url',type: 'POST',
data: new FormData(this),
cache:false,
contentType: false,
processData: false,
beforeSend: function(){
$('body').addClass('wait');
},
complete: function(){
$('body').removeClass('wait');
},
success:function(res){ $('#$divId').html(res);$('#$form_id').trigger('res et');}});e.preventDefault();e.unbind();});";


$view = $this->getView();
PjaxAsset::register($view);
$view->registerJs($js2);

return ;

}
static function ajaxForm2($url,$idform=null,$dviId='show',$type='P OST')
{
$pop="$.ajax({type:'".$type."',url :' ".$url." ',data: $('#".$idform."').serialize(),success:function(res){ $('#".$dviId."').html(res);}})";
echo $pop;

}

public function registerClientScript()
{

}

}


نحوه استفاده :



\common\widgets\myPjax::widget(['ajaxLink'=>true,
'params'=>[
'id'=>'send-for-bank',
'url'=>['account/send-for-bank'],
'divId'=>'result'
]
]
)
کد اچ تی ام ال


<span id="result" style="color: red">



</span>
<span id="send-for-bank" class="btn btn-info">

پرداخت

</span>توضیحات : چیز خاصی نداره فقط کدها رو نگاه کن می فهمی باید چیکار کنی
می تونی فقط واسه لینکها ازش استفاده کنی .. . divId همون دیو ی هست که نتیجه رو توش نمایش میده ...url ادرس مورد نظر id هم ای دی جاییه که روش کلیک میشه