ورود

View Full Version : مشکل در ajax یا url parsing



j_naroogha@yahoo.com
چهارشنبه 30 اردیبهشت 1394, 08:32 صبح
http://stackoverflow.com/questions/30333204/yii2-ajax-request-error-404
توی ویو دو تا لیست انتخاب دارم که میخام با انتخاب اولی مقادیر لیست دومی بر حسب اون لیست (با ایجکس) بشه.


<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use yii\helpers\Url;
use yii\web\View;
?>
<script>
var url1='<?php echo Url::to('Agehi/ajaxshahr'); ?>';
</script>
<?php
$script= <<<JS
function selectshahr()
{
var ost = $("#ostan").val();
$.ajax(
{
type: "post",
url: url1,
data: ost,
cache: false,
success: function(data)
{
alert(data);
}
});

}
JS;
$this->registerJs($script,View::POS_BEGIN);

$form = ActiveForm::begin([
'id' => 'login-form',
'options' => ['class' => 'form-horizontal','enctype'=>'multipart/form-data'],
]);
echo $form->errorSummary($model,['header'=>'لطفا خطاهای زیر را برطرف نمایید','class'=>'']);
echo \vova07\imperavi\Widget::widget([
'selector' => '#content','name'=>'content',
'settings' => [
'lang' => 'fa',
'minHeight' => 200,
'plugins' => [
'clips',
'fullscreen'
]
]
]);
?>
<?= Html::label('استان','ostan',array()) ?>
<?= Html::dropDownList('ostan', null,
ArrayHelper::map($ostan, 'id', 'name'),array('class'=>'form-control','onchange'=>'selectshahr()','id'=>'ostan')) ?>
<?= Html::label('شهرستان/شهر','shahr',array()) ?>
<?= Html::dropDownList('shahr', null,
array(),array('class'=>'form-control')) ?>


توی کنترلر هم به این صورت :


public function actionAjaxshahr($ostan)
{
$data = Shahr::findAll('condition', 'osid=' . $_POST['data']);
if(yii::$app->request->isAjax())
{
return $this->renderPartial('_Ajax_shahr', array('data' => $model));
}
return $this->renderPartial('_Ajax_shahr', array('data' => $model));

}

اما وقتی درخواست ایجکس فرستاده میشه 404 بر میگردونه ..
اصن خود url رو کپی میکنم و توی مرورگر میزنم 404 میده .
چرا ؟
ممنون

MMSHFE
چهارشنبه 30 اردیبهشت 1394, 10:36 صبح
URL رو بصورت مطلق بدین (اولش / اضافه کنید توی Url::to) ببینید درست میشه یا نه. ضمناً شما الان چرا پارامتر ostan$ برای اکشن ست کردین ولی توی URL نفرستادین؟ پارامتر رو حذف کنید اگه میخواین با پست ارسال کنید.

Keramatifar
پنج شنبه 31 اردیبهشت 1394, 05:39 صبح
ویدئوی آموزشی: ارتباط Ajax ای بین دو Combobox (http://barnamenevis.org/showthread.php?495893-%D9%88%DB%8C%D8%AF%D8%A6%D9%88%D9%87%D8%A7%DB%8C-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C-PHP-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C&p=2216054&viewfull=1#post2216054) در PHP

MMSHFE
پنج شنبه 31 اردیبهشت 1394, 09:09 صبح
فکر کنم سؤال استارتر درمورد نحوه کاربرد AJAX درکنار urlManager داخل فریمورک Yii باشه.

Keramatifar
پنج شنبه 31 اردیبهشت 1394, 12:50 عصر
بله، محض یادآوری Yii Framework یکی از فریم ورک های مبتنی بر PHP است، و شما با Copy/Past کدهایی که در این ویدئو آموزش دادم، در Yii می تونید ازش استفاده کنید
ضمنا در بخش Documentation سایت yii توضیح داده شده که چطور با اضافه کردن چند خط کد به همین کدها، می تونید بصورت یک پلاگین استاندارد Yii تبدیلش کنید

Veteran
پنج شنبه 31 اردیبهشت 1394, 13:09 عصر
محض یادآوری، در فریمورک Yii قابلیت ایجکس بصورت توکار وجود داره و نیاز به کپی پیست نیست، چراکه احتمالا کدهای اموزشی در این فیلم با یی هماهنگ نباشند و نیاز به تغییرات زیادی داره که ممکنه در توسعه پروزه در آینده اختلال ایجاد کنه. خوشبختانه فریمورک Yii در ساخت المنت ها یک پارامتر htmlOptions داره که یکی از کاربرد های اون ایجکسی کردن المنت هست. که میتونید با تنظیم کردن اندیس ajax در این پارامتر( ادرس، نوع ارسال، داده های ارسالی و.. ) خیلی راحت ایجکس رو روی المنت پیاده سازی کرد بدون درگیر کردن خودتون با موارد سمت کلاینت. که صد البته کار توسعه بسیار راحتر میشه.

حالل برای رفع مشکل این کاربر هم همین روش پیشنهاد میشه،بعد تنظیم ایجکس، خروجی رو در DropDownList دیگری قرار بدن. در صفحه ایی هم که خروجی چاپ میشه، داده هارو میتونن توسط متد listData ساخته و چاپ کنند.

Veteran
پنج شنبه 31 اردیبهشت 1394, 15:10 عصر
لپ تاپ روشن کردم،گفتم یک نمونه بزارم برای روشتنر شدن بحث.



echo CHtml::dropDownList('Apps', '', $app->Apps, array (
'prompt' => 'انتخاب نرم افزار',
'ajax' => array (
'type' => 'POST',
'url' => Yii::app()->createUrl('developer/app/info'),
'update' => '.DateTime',
'data' => array (
'appID' => 'js:this.value'
)
)
));




echo CHtml::dropDownList('DateTime ', '', array (), array (
'prompt' => 'تاریخ شروع',
'class' => 'DateTime'
));

MMSHFE
پنج شنبه 31 اردیبهشت 1394, 17:31 عصر
بله، محض یادآوری Yii Framework یکی از فریم ورک های مبتنی بر PHP است، و شما با Copy/Past کدهایی که در این ویدئو آموزش دادم، در Yii می تونید ازش استفاده کنید
ضمنا در بخش Documentation سایت yii توضیح داده شده که چطور با اضافه کردن چند خط کد به همین کدها، می تونید بصورت یک پلاگین استاندارد Yii تبدیلش کنید

بله دوست عزیز، اینها رو میدونم و یکساله که دارم این فریمورک رو آموزش میدم و با تیم توسعه اون هم همکاری دارم (البته نه خیلی زیاد). خواستم بدونید حداقل از این موضوع که Yii یکی از فریمورکهای مبتنی بر PHP هست، بی اطلاع نیستم. اینکه قرار باشه توی فریمورک هم با PHP خام کدنویسی کنیم و یا وقتی کسی سؤالی در بخش یک فریمورک میپرسه، با PHP خام راهنمایی کنیم و بگیم حالا برو طبق مستندات، با فریمورک سازگارش کن، درست نیست. ضمناً Yii خودش ابزارهای خیلی خوبی برای کار با AJAX بصورت داخلی داره و نیازی نیست کدها رو دستی باهاش سازگار کنیم.