View Full Version : برداشتن alert و اجرا نشدن کدها !!!
sara333
دوشنبه 15 مهر 1392, 10:49 صبح
سلام
به یه مشکلی برخورد کردم که اگر بتونید راهنماییم کنید ممنون میشم .( البته نمیدونم این مشکل رو باید در قسمت php مطرح میکردم یا js چون 1 جورایی مشکلم شاید به هر 2 قسمت مربوط بشه )
یه تیکه کد هست که در اون با انتخاب مقداری از یک کمبوباکس (select box) در رویداد onchange اون باید تابع به اسم fillSalePrice صدا زده بشه ( تابع js من ) یک سری مقادیر رو با خودش ببره ، از داخل بانکم مقادیری رو انتخاب کنه و جواب نهایی رو بیاره و بریزه داخل 2تا textbox که دارم . ( کد ها هم با php هستن )
مشکل اینه که تو تابع js ام ، وقتی یه alert الکی (' alert('11111 رو میزارم کد درست کار میکنه و مقادیر خونده شده از بانک داخل textbox هام قرار میگیره ولی وقتی این alert رو غیر فعال میکنم فقط یکی از textbox ها پر میشه .
کد ها و بانک رو هم میفرستم . اگر لطف کنید و راهنمایی کنید که مشکل چی میتونه باشه ممنون میشم .
وجود این آلرت نباید در اجراشدن یا نشدن کدهام تاثیری داشته باشه .
Javidhb
دوشنبه 15 مهر 1392, 11:57 صبح
احتمالا بخاطر سرعت بالای دوتا درخاست ajax هست... (احتمالا!)
sellMaterialServer.php (دو تا خط... باید مقدار ایندکس آرایه data$ رو توی کوتیشن بزارید)
print '<input type="text" name="exist_count" id="exist_count" disabled="disabled" value="'.$data['exist_count'].'" />';
//و
print '<input type="text" name="sale_price" id="sale_price" disabled="disabled" value="'.$data['sale_price'].'" />';
sellMaterial.php:
function fillSalePrice(value,divId)
{
$('#materialPurchasedId').val(value);
callResult(value,divId);
setTimeout(function(){
var divIdd = 'result3';
callResult(value,divIdd);
}, 500)
document.getElementById('number_of_sales').focus() ;
}
شما که دارید از jQuery استفاده میکنید بهتره که از ajax.$ (http://api.jquery.com/jQuery.ajax/) استفاده کنید.
sara333
دوشنبه 15 مهر 1392, 19:05 عصر
"احتمالا بخاطر سرعت بالای دوتا درخاست ajax هست... (احتمالا!)"
والا چی بگم . من هم نمیدونم دلیل منطقیش چی میتونه باشه ( دیگه به وجود جن تو این کد شک کردم :)
ولی طبق کفته شما انگار وقتی این alert رو میزارم یه جورایی تاخیر تو اجرای کد به وجود میاد و بعد کد درست کار میکنه . این تابع setTimeout رو هم که نوشتین فکر کنم کارش همینه ؟ درسته ؟ ایجاد delay ؟
بابت اون کتیشن ها هم که فرمودین : همینجوری بدون کتیشن هم کار میکنه ها
و مورد آخر : من تو jquery تازه کارم .اینی که گفتین رو ( ajax.$ ) نمیدونم چیه . باید بسرچم.
درکل بخاطر راهنمایی ممنون
Javidhb
دوشنبه 15 مهر 1392, 23:21 عصر
کار setTimeout (https://developer.mozilla.org/en/docs/Web/API/window.setTimeout)ایجاد وقفه است، تو کد بالا "نیم ثانیه" صبر میکنه و بعد تابع رو اجرا میکنه.
راجع به ajax.$ (http://api.jquery.com/jQuery.ajax/) مطلب فارسی و انگلیسی خیلی زیاده ... البته بهترین جا سایت خود jquery هست.(برای آشنایی اولیه اینجا (http://www.w3schools.com/ajax/)هم خوبه)
فقط میمونه یه مورد:
وقتی کاربر یک انتخاب میکنه شما هم باید برنامه تون رو جوری طراحی کنید که فقط یکبار بره سراغ بانک اطلاعاتی...
باید توی همون یک درخاست مقدارها مورد نظرتون رو بدست بیارید (اصلاح query) و بصورت json بفرستید برای جاوااسکریپت و اونجا مقدار جدید دوتا فیلد رو اعمال کنید...
یه مورد دیگه:
بدون کوتیشن واسه من از اون ارور وحشتناکا داد :))
sara333
سه شنبه 16 مهر 1392, 09:34 صبح
بخاطر توضیحات و راهنمایی ها خیلی ممنون .
در رابطه با مراجعات مکرر به بانک هم حق با شماست . هر چی این تعداد کمتر باشه فکر کنم بهتره و رو سرعت برنامه هم تاثیر بیشتری داره .و کلا منطقی تره . چشم این قسمتم تصحیح میکنم.
sara333
سه شنبه 16 مهر 1392, 11:14 صبح
یه موردی !
یکی از دوستان با تغییر تابع callResult من به این صورت مشکل رو برطرف کردن :
function callResult(value,divId){
if(value.length==0){
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","sellMaterialServer.php?id="+value+"&div="+divId, false);
xmlhttp.send(null);
if (xmlhttp.status==200)
{
document.getElementById(divId).innerHTML=xmlhttp.r esponseText;
}
}
یعنی چی !
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.