ورود

View Full Version : سوال: آوردن Option های جدید در Select به وسیله Ajax



Dead Space
پنج شنبه 15 اردیبهشت 1390, 09:51 صبح
سلام
من از طریق یک فایل که توش کد زیر قرار داده شده

<select id='w' size=4<
</select>
با ajax Jquery به یه فایل دیگه ارتباط برقرار می کنم وقتی دکمه ای زده شد و Option های جدید رو میارم داخل Select قرار میدم
کدی که در اون فایل هستش یه حلقه For هستش که به اندازه مقادیر میره جلو و دستور زیر رو چاپ می کنه

<option value="$e[i]"<$t[i]</option
حالا مشکل اینجاست محتوا به خوبی در FireFox نمایش داده میشه ولی در IE هیچی نمایش نمیده
میخواستم ببینم چه کدی من باید بزنم که در IE هم جواب بده

mehdi.mousavi
پنج شنبه 15 اردیبهشت 1390, 12:37 عصر
سلام.
لطفا کدی که نوشته اید رو اینجا قرار بدید تا بهتون بگم دلیلش چیه...

موفق باشید.

Dead Space
پنج شنبه 15 اردیبهشت 1390, 18:02 عصر
سلام این تیکه سورس کد من هستش
در فایل Index.html این هستش:

<select size="50" id='gname' onchange="pname(this.value)" style="width: 250px;height: 100;">
</select>یک دکمه ای هستش که فانکشنی رو صدا میزنه در اون فانکشن کد زیر هستش:
$.ajax({
url: 'receive.php?devid=' + value,
success: function(point) {
document.getElementById('gname').innerHTML = point;
},
cache: false
});
در فایل recive.php این کد هستش

if(isset ($_GET['devid'])){
$devid = SanitizeString($_REQUEST['devid']);
if(is_numeric($devid)){
$query = "SELECT groupname,gid FROM device_$devid GROUP by groupname";
$result = mysql_query($query) or die("MYSQL QUERY ERROR" . mysql_error());
$rows = mysql_num_rows($result);
for($i=0;$i<$rows;$i++){
$row = mysql_fetch_row($result);
echo "<option id='$devid' value='$row[1]'>$row[0]</option>";
}
}
این قطعه کد ها به خوبی در Firefox اجرا میشه ولی در IE هیچی نمایش داده نمیشه
ممنون

mehdi.mousavi
شنبه 17 اردیبهشت 1390, 14:52 عصر
سلام.
کد PHP ی شما، در واقع داره یک صفحه HTML تولید میکنه که حاوی option های جدید اون select هستش. در نتیجه، در این شرایط، بهتره که از load استفاده کنید. به بیان دیگه جای کد زیر:

$.ajax({
url: 'receive.php?devid=' + value,
success: function(point) {
document.getElementById('gname').innerHTML = point;
},
cache: false
});

میشه از کد خوانای زیر استفاده کرد:

$('#gname').load('receive.php?devid=' + value);

اما این باعث میشه تا مجبور باشید کل select element رو سمت سرور (توسط PHP) رندر کنید. اگر مایلید تا از کدی که خودتون نوشته اید استفاده کنید، بهتره این خط رو

document.getElementById('gname').innerHTML = point;

به

$('#gname').html(point);

تغییر بدید.

ایراد دیگه ای که در کد وجود داره، bind کردن onchange در کد به gname element هستش. در Unobtrusive JavaScript، توصیه میشه که هرگز کدهای HTML و JavaScript خودتون رو ترکیب نکنید. به بیان دیگه، بجای استفاده از

<select size="50" id='gname' onchange="pname(this.value)" style="width: 250px;height: 100;">
</select>

می تونید بنویسید:

<select size="50" id='gname' style="width: 250px;height: 100;">
</select>

و سپس در کد:

$('#gname').change(function() {
//pname function contents...
});

در نهایت، روش اصولی انجام اینکار اینه که جای اینکه درخواستی برای گرفتن HTML به سرور بفرستید، Option های مورد نظر رو بصورت JSON از صفحه PHP خودتون بگیرید و اونها رو در gname element خودتون قرار بدید. اینطوری اطلاعات کمتری روی خط نیز رد و بدل خواهد شد.

موفق باشید.

Dead Space
یک شنبه 18 اردیبهشت 1390, 10:01 صبح
سلام مجدد
ممنون از راهنماییتون
ولی مشکلی که هست اینه که وقتی من کل SELECT رو در فایل php بنویسم در زمان اجرا برنامه اون قسمت کادر select که خالی هستش وجود نداره و وقتی دکمه رو بزنم یه هو یه کادر select ظاهر میشه
من میخوام برنامه طوری باشه که در صفحه select هم باشه ولی خالی باشه