ورود

View Full Version : مشكل ajax در كدايگنايتر



z_b624
پنج شنبه 30 مرداد 1393, 11:54 صبح
سلام من تازه ajax رو دارم ياد ميگيرم اگه ميشه راهنماييم كنيد
من ميخوام 2 تا كومبوباكس داشته باشم كه توي يكيش همه ي شهر ها رو نشون بده و بهد هر شهري رو كه انتخاب كرد تمام هتل هاي اون شهر رو توي اون يكي كوبو باكس نشون بده ولي چون نميدونم چه جوري بايد از آجاكس توي ci استفاده كنم الان گيج شدم.
كدي كه نوشتم اين طوريه:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="<?php echo base_url(); ?>jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#shahr").change(function(){
var id=$(this).val();
$.post("<?php echo base_url().'index.php/controller/ajax/';?>",{id:id,active:true},function(data){
$("#result").html(data);
});

});

});
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>
<table width="100%" border="1" dir="rtl" >
<tr>
<th colspan="3" bgcolor="#3A95CE">&nbsp;</th>
</tr>
<tr>
<td><div align="right">
<label>

<select name="shahr" id="shahr">


<?php
if(isset($row))
foreach($row as $key=>$value)
{
echo '<option value="'.$value->shahr_id.'">'.$value->name.'</option>';
}
?>
</select>
</label>
</div></td>
<td>
<label>
<select name="hotel" id="hotel">
</select>
</label>
</td>
<td>
</tr>

</body>
</html>



خوب حالا من نميدونم چه جوري بايد اين value->shahr_id$ رو به اين قسمت ;() var id=$(this).val توي كد هاي جيكوئري م بشناسونم
خواهش ميكنم يكي كمكم كنه كارم خيلي لنگ اينه.

masiha68
جمعه 25 مهر 1393, 14:08 عصر
منم دقیقا الان این مشکل رو دارم ... دوتا راه به ذهنم میرسه .. یکی اینکه بیایی اطلاعاتی رو که از دیتابیس میگیری توی کنترلری که اطلاعات رو واسش میفرستی اکو کنی ... که خب اگه اینجوری باشی منطق ام وی سی رو نقض کردی :)
دوم اینکه بیایی این کارو بکنی :

function getostanajax() { $this->Model(); $do=$this->locationmodel->GetShahrAjax($_POST['ostan']); $this->load->view('location/showshahr',array('shahr'=>$do)); }
من خودم راه دوم رو انجام دادم .
از دوستان اگه کسی راه بهتری به ذهنش میرسه ممنون میشم بگم

pary_daryayi
شنبه 26 مهر 1393, 16:01 عصر
من این کد استان شهر رو یک بار نوشتم و نتیجه داد :
view : اطلاعات شهر و استان از دیتابیس در سلکت آپشن نمایش داده میشه :


<div class="form-group">
<label class="col-sm-3 control-label">استان</label>
<div class="col-sm-7">
<select name="doctor_ostan" class="form-control ostan" <?php echo $select_js ?> >
<option value="">استان</option>
<?php foreach($res_ostan as $row) {?>
<option value="<?php echo $row->ostan_id; ?>"
<?php echo set_select('doctor_ostan', $row->ostan_id);?>>
<?php echo $row->ostan_text; ?></option>
<?php }?>
</select>
<?php echo form_error('doctor_ostan'); ?>
</div>
</div>

<div class="form-group">
<label class="col-sm-3 control-label">شهر</label>
<div class="col-sm-7">
<select name="doctor_shahr" class="form-control shahr" <?php echo $select_js ?>>
<option value="">شهر</option>
</select>
<?php echo form_error('doctor_shahr'); ?>
</div>
</div>



js:


$(document).ready(function(){

$(".ostan").click(function()
{
var id=$(this).val();
var dataString = 'id='+ id;
$.ajax
({
type: "POST",
url: base_url+"city/check_city",
data: dataString,
cache: false,
success: function(data)
{
$(".shahr").html(data);
//alert(data);
}
});


});


});



کنترلر :




public function check_city() {
$id=$this->input->post('id');
$where=array('ostan_id'=>$id);
$result=$this->shahr_model->get_by($where);
echo '<option value=""> شهر</option>';
foreach ($result as $row){
echo '<option value="'.$row->shahr_id.'" '.'>'.$row->shahr_text.'</option>';
}
}

masiha68
شنبه 26 مهر 1393, 17:51 عصر
اینکه نقض ام وی سی هستش !!! نباید کدهای ویو توی کنترلر نمایش داده بشن
راهی که من نوشتم قانونی تره :)

pary_daryayi
شنبه 26 مهر 1393, 20:25 عصر
فکر نمیکنم نقص mvc باشه ، مهم اینه که اطلاعات دارن در کنترلر هندل میشن و بعد به view ارسال میشن ، فقط این ارسال داره با آجاکس اتفاق میفته ..

masiha68
یک شنبه 27 مهر 1393, 01:00 صبح
توی کنترلر نباید هیچ اکویی اتفاق بیفته ...یعنی داده ها فقط توی ویو نمایش داده میشن ... البته شخصا علاقه ای به رعایت 100% پترن های برنامه نویسی ندارم :)
راه بهترش اینه که اون کنترلری که دادها به صورت اجاکس واسش ارسال میشه یه ویو رو رندر کنه (لود کنه) و اطلاعات رو بفرسته به همون ویو ... حالا ما مثلا اگه قراره داده های برگشتی از تابع اجاکسمون رو توی ای دی show نمایش بدیم این کارو بکنیم :
ویویی که دادها به صورت اجاکس واسه کنترلرش ارسال میشن :

<?phpforeach($shahr->result() as $show){ echo "<option value=".$show->id.">".$show->name."</option>";}?>

ویو اول :

<form method="post"> <select class="form-control" name="ostan" id="ostan" onblur="return GetShahr();"> <option>استان</option> <?php foreach($ostan->result() as $ostan) { echo "<option value=".$ostan->id .">".$ostan->name ."</option>"; } ?>
</select> <br> <select name="shahr" id="show" class="form-control"><option>شهر</option> </select> <br> <input type="text" name="daneshgah" class="form-control" style="width: 300px !important;"><br> <input type="submit" value="اضافه کردن دانشگاه" class="btn btn-info">

</form> <p></p> <p></p> <script> function GetShahr() { var datasend={'ostan':$('#ostan').val()};
$.post("<?php echo base_url();?>location/getostanajax",datasend,function(data){$('#show').html(data)});
} </script>
کنترلر :



function getostanajax() {
$this->Model();
$do=$this->locationmodel->GetShahrAjax($_POST['ostan']);
$this->load->view('location/showshahr',
array('shahr'=>$do));
}



نمیدونم این کدها چرا بهم میریزن

pary_daryayi
دوشنبه 28 مهر 1393, 07:16 صبح
درسته ، نحوه ی نوشتن شما صحیح تره .



نمیدونم این کدها چرا بهم میریزن


حق با ایشونه ، چند وقته کدها رو که قرار میدیم بهم میریزه ، غیر از تگ CODE
منم با دستکاری کدها رو مرتب میکنم .
چرا اینطور شده ؟