PDA

View Full Version : سوال: مشکل با کروم : عبارات شرطی بر روی نتیجه تابع ایجکسی کار نمکنند



plague
جمعه 30 دی 1390, 15:13 عصر
سلام
من یه تابع دارم که با ایجکس به یک صفحه پی اچ پی وصل میشه و مقداری رو میگیریه
من میخام بر اساین مقدار ی سری اعمال انجام بدم


function test(){
$.ajax({
type: 'POST',
url: 'testing.php',
success: function(data) {
if($.trim(data) == 'OK' )
alert('success , its ok');
else
alert(data)
}
})
}


testing.php
<?php echo 'OK'; ?>



مشکل من اینه که توی فایر فاکس و اینترنت اکسپلورر درست کار میکنه و آلرت میده success , its ok ولی داخل کروم با اینکه اون شرط درسته ولی شرط همش غلط میشه و خوده OKرو بری من آلرت میکنه !!یعنی مقدار رو درست داه ولی اون شرط برقرر نمیشه !

tux-world
جمعه 30 دی 1390, 23:31 عصر
تو این لینک (http://stackoverflow.com/questions/5387188/problem-with-an-ajax-example-on-w3schools)گفته شده که از jQuery استفاده کنید

zootos
شنبه 01 بهمن 1390, 08:54 صبح
سلام
من یه تابع دارم که با ایجکس به یک صفحه پی اچ پی وصل میشه و مقداری رو میگیریه
من میخام بر اساین مقدار ی سری اعمال انجام بدم


function test(){
$.ajax({
type: 'POST',
url: 'testing.php',
success: function(data) {
if($.trim(data) == 'OK' )
alert('success , its ok');
else
alert(data)
}
})
}


testing.php
<?php echo 'OK'; ?>



مشکل من اینه که توی فایر فاکس و اینترنت اکسپلورر درست کار میکنه و آلرت میده success , its ok ولی داخل کروم با اینکه اون شرط درسته ولی شرط همش غلط میشه و خوده OKرو بری من آلرت میکنه !!یعنی مقدار رو درست داه ولی اون شرط برقرر نمیشه !


از جی سون استفاده کن یعنی به اجکست بگو که مقدار خروجی json هستش بعد data خودش ابجکت می شه به راحتی می تونی شرط بزاری و چک کنی کروم دزد هم می شناسه :)

zootos
شنبه 01 بهمن 1390, 08:55 صبح
ببخشید یادم رفت

dataType: "json"

AMIBCT
شنبه 01 بهمن 1390, 10:02 صبح
شاید مشکل از این باشد که فایل testing.php را به صورت UTF-8 ذخیره کرده‌اید

فایل‌های php باید UTF-8 Without BOM ذخیره شوند

ravand
شنبه 01 بهمن 1390, 10:54 صبح
شاید مشکل از این باشد که فایل testing.php را به صورت UTF-8 ذخیره کرده‌اید

فایل‌های php باید UTF-8 Without BOM ذخیره شوند

بعضي مواقع اين گزينه براي فارسي كار رو خراب ميكنه من تجربه اش رو دارم UTF-8 Without BOM

plague
شنبه 01 بهمن 1390, 16:56 عصر
از جی سون استفاده کن یعنی به اجکست بگو که مقدار خروجی json هستش بعد data خودش ابجکت می شه به راحتی می تونی شرط بزاری و چک کنی کروم دزد هم می شناسه :) ممنون بابت پالسخ مشکل اینه که این یه نمونه خیلی ساده بود
ممکنه من بخام یه DIV رو با کلی دم و دستگاه برگشت بده امکانش هست همچیم چیزی رو توی جیسون برگشت داد ؟ مثلا

J[0]
فلگ باشه که oK یا NO K! و

J[1]
هم یه DIV باشه حاوی
کد های HTML ؟



شاید مشکل از این باشد که فایل testing.php را به صورت UTF-8 ذخیره کرده‌اید

فایل‌های php باید UTF-8 Without BOM ذخیره شوند

ممکنه منم به کاراکتر انکدینگ فایل پی اچ پی مشکوک شدم چون با اینکه در data رو از فیلتر trim میگزرونم باز هم وقتی data.length رو آلرت میکنم کروم بهم 6 میدهولی فایر فاکس 2 میده

AMIBCT
دوشنبه 03 بهمن 1390, 17:38 عصر
گوگل کروم به نظر من هنوز به شرایط پایداری فایرفاکس نرسیده و اشکال‌های این چنین داره

بخش آخر نوشته‌ی شما رو متوجه نمی‌شم که گفتید شما هم مشکوک شدید
الان یعنی اینکه فقط مشکوک شدید یا آزمایش هم کردید؟

یک‌بار دیگه تکرار می‌کنم فایل‌های php باید با کدگذاری UTF-8 Without BOM ذخیره شوند
چه برای AJAX و چه برای صفحات معمولی
اگر برای نوشتن فارسی مشکل دارید نشان‌دهنده‌ی این است که یا از ویرایشگر مناسبی استفاده نمی‌کنید یا تنظیمات لازم را در ویرایشگر انجام نداده‌اید

ویرایشگر پیشنهادی من ++Notepad هست

tux-world
دوشنبه 03 بهمن 1390, 19:30 عصر
منظور از UTF-8 Without BOM چیه؟

AMIBCT
سه شنبه 04 بهمن 1390, 16:16 عصر
فرمت ذخیره‌سازی UTF-8 فرمتی سازگار با ASCII هست
اگر کد حرف‌های استفاده شده کمتر از ۱۲۸ باشد( حروف انگلیسی و اعداد معمولی که در نوشتن کدهای php کاربرد دارن )
متن به همان شکل ذخیره می‌شود
اگر کد حرف بیشتر از ۱۲۸ باشد، با الگوریتم خاصی، از دو تا چهار بایت فضا اشغال خواهد شد( متن‌های یونیکد و فارسی )
یعنی یک حرف در یک فایل که با فرمت UTF-8 ذخیره شده ممکن است از ۱ تا ۴ باید فضا اشغال کند

BOM یا Byte Order Mark علامتی است ۲ بایتی که در ابتدای فایل قرار می‌گیرد و فرمت ذخیره‌سازی را مشخص می‌کند( در فایل‌های یونیکد )
برای اینکه برنامه‌ی باز کننده بداند که بایت‌های موجود در فایل را چگونه به متن تبدیل کند
و در ابتدای فایل‌های UTF-8 هم قرار می‌گیرد

از طرفی برای نوشتن متن‌های فارسی لازم است که از سیستم یونیکد استفاده کنیم
و از طرف دیگر مفسر php فایل‌های یونیکد را شناسایی نمی‌کند
بنابراین از فرمت UTF-8 که با کدهای ASCII سازگاری دارد استفاده می‌کنیم
و برای اینکه BOM ابتدای فایل UTF-8 مشکل ایجاد نکند( php آن را نمی‌شناسد و مستقیم به خروجی ارسال می‌کند )
حذفش می‌کنیم

نتیجه می‌شود فایلی که با فرمت UTF-8 ذخیره شده( هر حرف ۱ تا چهار بایت ) ولی علامت یا BOM ندارد
بیشتر ویرایشگرهای برنامه‌نویسی موقع باز کردن فایل‌های متنی که BOM ندارند و باید به صورت ASCII شناسایی شوند
ابتدا تلاش می‌کنند بافت‌های خاص UTF-8 را در فایل جستجو کنند تا اگر فایل UTF-8 Without BOM بود، بتوانند آن را درست نمایش دهند

بنابراین باز هم تکرار می‌کنم:
فایل‌های php باید با کدگذاری UTF-8 Without BOM ذخیره شوند

ravand
سه شنبه 04 بهمن 1390, 16:58 عصر
نه داداش . همه اش نيازي نيست از اين گزينه ي UTF-8 Without BOM استفاده كنيد.
وقتي شما در كدهاتون از تابع header يا سيژن استفاده ميكنيد براي حذف كاراكترهاي مخفي اضافي بايد از اين گزينه استفاده كنيد. ولي در حالت عادي براي سازگاري با فارسي بايد از اين گزينه Encode in utf-8 استفاده كنيد..

AMIBCT
سه شنبه 04 بهمن 1390, 23:31 عصر
مرورگرهای قدیمی BOM را نشان می‌دهند و در قالب سایت مشکل ایجاد می‌کنند
برخی از مرورگرها با BOM در ابتدای فایل‌های CSS مشکل دارند و قانون اول را خراب می‌کنند
BOM در ابتدای فایل PHP باعث می‌شود SESSION، Cookie، و Headerها کار نکنند و با خطا مواجه شوند
یک مشکل هم که در همین تاپیک در استفاده از AJAX پیش آمده
اگر در ابتدای فایل شما BOM وجود داشته باشد w3 Validator به شما هشدار می‌دهد که به دلیل سازگاری با مرورگرهای قدیمی آن را بردارید

حالا خودتان تصمیم بگیرید که کدام عاقلانه است، برداشتن BOM یا صحبت دوست گرامی ravand

به علاوه فایل بدون BOM هیچ مشکلی با فارسی ندارد
کافی است در سرآمد فایل HTML مشخص کنید که محتوا utf8 است

plague
چهارشنبه 12 بهمن 1390, 23:37 عصر
مشکل من حل شد اینجا میگم که بتونه برای بقیه که این مشکل رو دارن مفید واقع بشه
همونطور که دوستان اشاره کردن مشکل با انکدینگ یا خلاصه با خوده صفحات بود
البته من خیلی به صورت خلاصه اینجا مشکلم رو بیان کردم اون فایل PHP در واقع هسته برنامه من بود با حدود 30 صفحه دیگه(کلاس) که توی اون ضمیمه شده بودن
خلاصه با جستجو توی اون صفحات اینکلود شده متوجه شدم که یکی از این صفحات مشکلی داره که باعث میشه چند کاراکتر اضافه به جواب برگشتی ایجکس اضافه بشه
این کاراکتر ها در ظاهر نامرئی هستن و با تریم هم از بین نمیرن
فایرفاکس قدرت خودشو نشون میده و اونها رو در نظر نمیگیره و نتیجه میشه
"OK" == "OK"
TRUE
اما کروم نمیتونه اینکارو انجام بده و نتیجه اینطوری میشه
"OK" == " OK"
FALSE

تقریبا مطمئن هستم که همه صفحات من انکدینگ یکسان داشتن چون ذاتا ادم تنبلی هستم و یک کلاس رو که نوشتم از پیجش کپی میگیرم , همونجا پیست و رینیم میکنم و کلاس بعدی رو توش مینویسم تا در تایپ صرفه جویی بشه !!
خلاصه وقت و حوصله تجزیه تحلیل مشکل رو نداشتم بعد از اینهمه سروکله زدن باهاش فقط خوشحال بودم که حل شد !

یه پیج جدیدی درست کردم و کد ها رو از پیج قدیمی به جدید انتقال دادم تا مشکل حل شد