آموزش ای جکس (Ajax)، تکنیک غیرهمزمانی در وب

ای جکس (Ajax) عنوان جذابی است از نوعی تکنیک برنامه نویسی ترکیبی که از سال 2005 با کاربرد آن توسط موتورهای جستجویی چون گوگل و برنامه نویسان وب مطرح شد، این کلمه مخففی است از سرواژه های Asynchronous JavaScript And XML و در بیانی ساده به معنی نقل و انتقال داینامیک و غیرهمزمان اطلاعات در صفحات وب بدون بارگذاری مجدد (reload) آنها است، نمونه برجسته ای از کاربرد ای جکس در شبکه های اجتماعی، چت روم های آنلاین و سرویس های آپلود فایل خودنمایی می کند، در واقع با کمک این تکنیک درخواست از سمت مرورگر به سرور ارسال می شود بدون اینکه در روند صفحه فعلی مرورگر کاربر خللی وارد شود (عبارت Asynchronous به معنی غیرهمزمان یا ناهمگام است و این یعنی عملیات در پس زمینه صورت می گیرد و کاربر همچنان می تواند در مرورگر پیمایش کند)، اگرچه به کارگیری این تکنیک در مقایسه با سایر زبان های اسکریپت نویسی وب تقریبا جدید و روشی نوین است، اما باید توجه داشت که ای جکس یک زبان جداگانه محسوب نمی شود بلکه شیوه ی نوینی از به کارگیری و ترکیب JavaScript و XML است.
تلفظ و نگارش صحیح Ajax
قبل از اینکه به ادامه آموزش بپردازیم یادآور می شویم که این عبارت در بین برنامه نویسان فارسی زبان وب گاها به صورت های متفاوتی تلفظ و نوشته می شود که در واقع همه به یک مفهوم اشاره دارند، به طور مثال آجاکس، آژاکس، ایجکس، ای جکس و...، در نگارش انگلیسی این کلمه نیز گاهی AJAX و گاهی Ajax (با تلفظ اِی جَکس) نگاشته می شود، به نظر می رسد صحیح ترین واژه برای تلفظ و نگارش این عبارت اِی جَکس (Ajax) باشد که در مجموعه مطالب آموزشی سایت از آن استفاده کرده ایم.
ضرورت و پیش نیازهای فراگیری ای جکس (Ajax)
پیشتر اشاره کردیم تکنیک ای جکس مبتنی بر ارسال غیرهمزمان درخواست از مرورگر به سرور در پس زمینه است، منظور از غیرهمزمانی این است که با ارسال یک درخواست مبتنی بر ای جکس نیازی به بارگذاری مجدد صفحه وب نیست و کاربر می تواند تجربه بهتری از کار با برنامه داشته باشد، به طور مثال فرض کنیم بخواهیم بخش کوچکی از قسمت مدیریت سایتمان (مانند بخش تعداد آخرین نظرات جدید) را به روزرسانی کنیم، در حالت معمول برای انجام این کار راهی جز رفرش صفحه وب وجود ندارد، اما با ای جکس می توانیم در فواصل زمانی خاص درخواست هایی در پس زمینه ارسال، نتیجه را دریافت و مطابق با نیازمان به کمک جاوا اسکریپت اطلاعات بازگشتی را پردازش کنیم، کاربرد درست و بجای این شیوه می تواند لذت استفاده از برنامه های تحت وب را دوچندان کند ضمن اینکه برخی از برنامه ها ماهیتا باید مبتنی بر تکنیک غیرهمزمانی طراحی شوند، به فرض تصور وجود برنامه پشتیبانی آنلاین بدون این شیوه عملا ممکن نیست، برای فراگیری ای جکس داشتن حداقل دانشی از JavaScript، HTML و آشنایی مختصری با PHP ضروری است، چرا که پایه اصلی درخواست ای جکس از سمت کاربر و دریافت پاسخ سرور به وسیله کدهای جاوا اسکریپت شکل می گیرد، علاوه بر این در پروژه های کاربردی مدیریت داده های ارسالی از سمت کاربر به سرور نیازمند آشنایی با یک زبان برنامه نویسی مانند PHP است، به هر صورت اگر خیلی با JavaScript یا PHP آشنا نیستیم در حداقل شرایط نیز می توانیم با پیروی از برخی نمونه کدها و آشنایی کلی با تکنولوژی ای جکس تا حدود زیادی نیازهای وبمان را بر طرف کنیم.
شروع آموزش ای جکس با یک مثال
برای شروع آموزش این تکنیک شاید بهتر باشد ابتدا به صورت کاربردی با ای جکس آشنا شویم، به طور مثال یک فرم ساده وب را در نظر بگیریم که در رویداد onchange تابعی مبتنی بر جاوا اسکریپت را اجرا می کند، برای شروع کدهای زیر را در یک فایل HTML با نام فرضی ajax-simple-form.html درج می کنیم:
<form name="myform" action="#">
<label for="username">نام: </label>
<input name="username" id="username" type="text" onchange="ajaxRequest();">
<br><br>
<label for="srvertime">زمان: </label>
<input name="srvertime" id="srvertime" type="text">
</form>
همانطور که گفتیم ارسال و دریافت اطلاعات در وب در حالت عادی با بارگذاری مجدد صفحه انجام می شود که این مسئله مخصوصا در مواردی که می خواهیم یک عملیات جزئی در صفحه داشته باشیم چندان منطقی و باب طبع کاربر نیست، برای حل این مشکل با افزودن چند خط کد ای جکس زیر می توانیم بدون رفرش صفحه اطلاعات را به سرور منتقل کرده و پاسخ را دریافت کنیم.<script >
function ajaxRequest(){
var xmlHttp;
try{
//Opera, Firefox, Safari
xmlHttp = new XMLHttpRequest();
} catch (e){
//Internet Explorer
try{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
alert("متاسفانه مرورگر شما از ای جکس پشتیبانی نمی کند");
return false;
}
}
}
}
</script>
کد بالا برای ارسال درخواست در بستر ای جکس کامل نیست و بعد از افزودن کدهایی که در ادامه خواهیم دید درخواست به سرور در پس زمینه ارسال می شود، در بررسی کد XMLHttpRequest یک Object است که در جاوا اسکریپت با دستور new فراخوانی و به متغیر نسبت داده می شود، برای درک دقیق مفهوم آبجکت باید با برنامه نویسی شی گرا آشنا باشیم اما فعلا در همین حد بدانیم که XMLHttpRequest در واقع ساز و کاری را فراهم می کند که بتوانیم درخواست هایی در بستر ای جکس ارسال و نتیجه را دریافت کنیم، این ساز و کار را در برنامه نویسی اصطلاحا API (مخفف Application Programming Interface) می نامند، XMLHttpRequest در مرورگر اینترنت اکسپلورر در نسخه های قدیمی به نحو متفاوتی عمل می کند و اگر بخواهیم چنین مرورگرهایی را نیز پشتبانی کنیم نیاز به کدهای اضافه و استفاده از ActiveXObject داریم، به همین دلیل در نمونه کد بالا تنظیمات سازگار با همه مرورگرها آورده شده تا از این نظر با مشکل مواجه نشویم، اما برای ارسال درخواست و دریافت نتیجه در پس زمینه به دستورات بیشتری نیاز است که در ادامه خواهیم دید، کدهای زیر را به انتهای تابع ajaxRequest اضافه می کنیم (منظور از انتها قبل از بسته شدن تابع با آخرین علامت } است، نمونه کامل در انتهای آموزش در لینک پیش نمایش آنلاین درج شده است):xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState == 4){
document.myform.time.value = xmlHttp.responseText;
}
}
xmlHttp.open("GET", "server-time.php", true);
xmlHttp.send(null);
در تحلیل تکه کد بالا onreadystatechange در ای جکس متدی از آبجکت XMLHttpRequest است که پس از ارسال درخواست مقدار عددی متد readyState را بررسی می کند تا ببیند که رویداد جدیدی رخ داده یا خیر، در بیان ساده هر اتفاقی که در روند ارسال درخواست های مبتنی بر ای جکس رخ می دهد با یک مقدار عددی (از 0 تا 4) مشخص می شود، این مقدار عددی را متد readyState در خود نگه می دارد و متد onreadystatechange زمانی برقرار و به اصطلاح true است که مقدار readyState از حالت پیش فرض به یک عدد تغییر کند (متدهایی مانند onreadystatechange را که با رویداد سر و کار دارند در اصطلاحات برنامه نویسی EventHandler می گویند)، متد readyState را در ادامه به صورت کامل بررسی می کنیم.readyState یا وضعیت آماده چیست؟
همان طور که اشاره شد بعد از فراخوانی XMLHttpRequest مرورگر یک درخواست ای جکس را شروع می کند و متد readyState در طی این روند با اعدادی از 0 تا 4 که هر کدام یک وضعیت را نمایش می دهند مقداردهی می شود، عدد 0 وضعیت UNSENT را نشان می دهد که یعنی متد open در مرورگر ساخته شده اما هنوز فراخوانی نشده است، عدد 1 وضعیت OPENED را نشان می دهد یعنی متد open فراخوانی شده، عدد 2 نشانگر وضعیت HEADERS_RECEIVED است یعنی متد send فراخوانی شده و سربرگ های HTTP و پاسخ سرور آماده است، عدد 3 نشانگر وضعیت Downloading است، یعنی مرورگر در حال دریافت مقادیر ارسال شده از سرور به عنوان پاسخ است، در گام آخر برای اینکه بررسی کنیم همه چیز مرتب است readyState باید DONE یا کامل باشد، حالت کامل با عدد 4 دریافت می شود و با شرط ساده if برابری آن را بررسی می کنیم (که آیا xmlHttp.readyState برابر 4 است یا خیر).
دریافت و نمایش پاسخ سرور در ای جکس (Ajax)
پس از دریافت مقدار عددی 4 در بررسی readyState با دستور شرطی if، تکه کد document.myform.time.value اجرا و مقدار برگردانده شده توسط سرور که در متد responseText وجود دارد را به فیلد input که با مقدار name آن مشخص شده می دهیم، با دقت در کد متوجه می شویم که در متد open از عبارت GET برای آرگیومنت اول، آدرس یک فایل PHP برای آرگیومنت دوم و عبارت true برای آرگیومنت سوم استفاده شده، در حال حاضر در همین حد بدانیم که این پارامترها به ترتیب برای مشخص کردن نحوه ارسال اطلاعات (متد GET یا POST)، آدرس فایل مقصد در سرور (در اینجا فایل PHP) که درخواست به آن ارسال می شود و تعیین اینکه آیا سایر فعالیت های مرورگر در طی روند درخواست متوقف شود یا خیر (به ترتیب با مقدار false یا true، در حالت پیش فرض true) می باشند، در نهایت اطلاعات را با متد send به فایلی که با متد open فراخوانی گردیده ارسال می کنیم، در کد فعلی هیچ مقداری در send ارسال نشده و مقادیر آرگیومنت آن برابر با null است، اما در آموزش های بعدی خواهیم دید که می توان در یک درخواست مبتنی بر ای جکس پارامترهایی نیز به همراه درخواست به سرور ارسال کرد، کدمان در نهایت به صورت زیر خواهد بود:
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | فرم ارسال درخواست ای جکس</title>
<!-- Webgoo.ir -->
<style>
body{
font-family:Tahoma, Geneva, sans-serif;
direction:rtl;
font-size:12px;
}
label{
display:inline-block;
width:50px;
}
</style>
<script>
function ajaxRequest(){
var xmlHttp;
try{
//Opera, Firefox, Safari
xmlHttp = new XMLHttpRequest();
} catch (e){
//Internet Explorer
try{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
alert("متاسفانه مرورگر شما از ای جکس پشتیبانی نمی کند");
return false;
}
}
}
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState == 4){
document.myform.time.value = xmlHttp.responseText;
}
}
xmlHttp.open("GET", "server-time.php", true);
xmlHttp.send(null);
}
</script>
</head>
<body>
<form name="myform" action="#">
<label for="username">نام: </label>
<input name="username" id="username" type="text" onchange="ajaxRequest();">
<br><br>
<label for="servertime">زمان: </label>
<input name="servertime" id="servertime" type="text">
</form>
<hr>
پس از نوشتن عبارت مورد نظر در فیلد نام، در فیلد زمان یا در یک فضای خالی صفحه وب کلیک کرده و اندکی منتظر بمانید، تابع ajaxRequest در رویداد onchange اجرا شده و پاسخ سرور در فیلد زمان نمایش داده می شود.
</body>
</html>
پیش نمایش آنلاین
نمایش افکت fade in با ای جکس (Ajax)
فریم ورک های ای جکس (Ajax Frameworks)
نمایش پیام در حال بارگذاری با ای جکس (Ajax)
ذخیره و نمایش اطلاعات فایل با ای جکس (Ajax) و PHP
ارسال و دریافت اطلاعات با متد GET و POST در ای جکس (Ajax)


من یه سوالی داشتم من میخوام یه اسکریپت چت روم بسازم به یه مشکلی خوردم:
وقتی تعداد زیادی درخواست اژاکس ارسال میکنم صفحه مرورگر کلا هنگ میکنه، مثلا یه درخواست میفرستم که هر 2 ثانیه یک بار چک کنه پیام جدیدی اومده یا نه تا اونو نشون بده بعد میگم هر 2 ثانیه یک بار هم چک کنه کاربر جدیدی انلاین شده یا نه تا اونو نمایش بده همینطور درخواست های دیگه که هر 2 ثانیه یک بار بررسی میکنم تا قسمتی از چت روم رو اپدیت کنه ولی وقتی درخواست های ایجکس زیاد میشه مرورگر هنگ میکنه کلا
خواستم بدونم چطور میشه اینو مدیریت کرد
https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
ممنونم... خیلی ساده و روون توضیح دادین.. اونقدر که تشویق شدم محتوای یه فایل تکس رو با ایجکس درون یه div بیارم ولی در اولین تجربم با شکست مواجه شدم و پیغامی که میده مبنی بر اینه: دسترسی به xmlhttprequest در ادرس فایلم از مبدا null توسط cors policy بلاک شده... اصلا نمیفهمم این یعنی چه و چکار باید بکنم...
و سوال بعدیم این بود که ایا یه کد ایجکس لازمه در لوکال هاست اجرا بشه؟
$(".div-class").append('<li class="product"><div id=\' +id+ \' class="product-cart-details"><h4 class="product-title"><a href="product.html"><span id="title">\' +title+ \'</span></a></h4><span class="cart-product-info"><span class="cart-product-qty">' +tedad+ ' </span><span id="gheymat"> ' + gheymat+ '</span></span></div><figure class="product-image-container"><a href="product.html" class="product-image"><img src="\'+img+\'" alt="محصول"></a></figure><a href="#" class="btn-remove" title="حذف محصول"><i class="icon-close"></i></a></li>')
<script>
var id=0;
$(".product .product-media .btn-product ").click(function () {
var length='';
id=$(this).attr('id');
length=$(".product #"+id+"").length;
$.ajax({
type:'post',
url:"sabad.php",
data:{idmahsool:id}
})
.done(function (msg) {
if (length==1){
var tedad=0;
tedad=$(".dropdown-cart-products #"+id+" .cart-product-qty ").html();
tedad=parseInt(tedad);
tedad=tedad+1;
$(".dropdown-cart-products #"+id+" .cart-product-qty").html(tedad);
}
else {
}
})
})
</script>
این دستوراتم هست از طریق ایجکس ارسال کردم به صفحه دیگر تا عملیات اینسرت رو انجام بده ولی یه شرط گذاشتم بین ایجکس.
else {
$.ajax({
type: 'post',
url: "sabad.php",
data: {idmahsool: id}
})
.done(function (msg) {
tedad=$(".dropdown-cart-products #"+id+" .cart-product-qty ").html();
alert(tedad);
})
}
})
نکته: برای خطایابی کدها می توانید در هنگام اجرا در مرورگر دکمه F12 را بزنید و از امکانات قسمت Console استفاده کنید.
<script>
$(document).ready(function(e) {
var id=0;
$(".btn-product").click(function () {
id=$(this).attr('id');
$.ajax({
type:'post',
url:"sabad.php",
data:{idmahsool:id}
})
.done(function (msg) {
alert(msg);
})
})
})
</script>
راهنمائي بفرمائيد
لطفا کدهای زیر را اجرا کنید:
1- محتویات فایل برنامه جاوااسکریپت:
حذف شد
2- محتویات فایل php (readfile.php):حذف شد
3- و فایل read.txt:حذف شد
(لازم بذکر است محتویات این فایل متنی مرتب در حال تغییر است.)نکته: setInterval به خودی خود یک تابع است اما می تواند تا زمان باز بودن پنجره مرورگر در مدت زمان تعیین شده در دور تکرار به تعداد بی شماری اجرا شود، منظور از تداخل توابع کدهایی است که در هر دور setInterval در حال اجرا هستند.
setInterval(function(){
(برنامه Ajax )
}, 200);
var timer = setInterval(function(){
(برنامه Ajax )
}, 200);
clearInterval(timer);
ساختار کدهای برنامه مشخص نیست اما طبق توضیحات، clearInterval باید در ابتدای قسمت Ajax درج شود، در صورت دریافت پاسخ 200 (یا هر نتیجه دیگری) در ای جکس می توانید تابع را مجدد فراخوانی کنید.نکته: با درج دستور alert و خروجی فرضی می توانید روند اجرای تابع را خطایابی کنید.
سرچ کردم میخواستم با ajax این کار انجام بدم ولی بیشتر کدها مربوط به رویداد مثل کلیک و لود شدن صفحه بود!!!
ممنون میشم راهنماییم کنید که چه جوری میتونم چنین کدی بنویسم
https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout
من در ابتدا به مشکل برخوردم و هر کدی که از ajax می نویسم یا از سایت مختلف کپی میکنم اجرا نمیشه ... با چند مرور گر مختلف امتحان کردم و آخرین ورژن wamp نصب کردم .
باز هم اجرا نمیشه ... !
localhost/dir/file.php
اگر در اجرای فایل مشکلی وجود نداشت باید سورس های Ajax را مرحله به مرحله بررسی کنید، در صورت تمایل از کدها اسکرین شات تهیه نمائید تا امکان بررسی بیشتر فراهم باشد.انگار شما تکنیک comet در ایجکس رو اطلاعی ندارید زیاد چون من در هر آموزشی که دیدم تکنیک comet در ایجکس بدون حلقه بینهایت و sleep امکان پذیر نیست! درواقع واسه همین خاطر هست که comet شکل گرفته کامت در واقع یه تکنیکی از ایجکس هست که به نظر میاد سرور یک درخواستی رو به مرورگر میفرسته ولی درواقع خود مرورگر درخواست میفرسته و منتظر میمونه تا 20 ثانیه که سرور درخواست بفرسته و نهایت ثانیه آخر یعنی به 20 ثانیه رسید یک درخواست خالی میفرسته و مرورگر میفهمه درخواست خوالی اومده و دوباره درخواست میفرسته و منتظر میمونه و به محض درخواست درست دوباره تایم اوت رو غیرفعال میکنه و مجدد درخواست میفرسته که اینگونه به نظر میاد سرور داره یه درخواستی رو میفرسته و به محض ثبت رکورد جدید در دیتابیس دریافت میشه
اینم قسمت پروژه لطفا کدها رو بررسی کنید مشکل رو ببینید باور کنید من 3 روزه همه خطاها رو دیدم و از من دیگه بر نیومد
حذف شد
نیازی به دیتابیس نداره این پروژه میتونید راحت در localhost اجرا کنیداینم پروژه در هاست
حذف شد
در PHP بهتر است از شیوه هایی استفاده کنید که درخواست به محض دریافت، اجرا، پاسخ برگردانده و اتصال پایان یابد، به هر صورت کدهایتان را با توجه به زمان محدودی که در اختیار داریم بررسی کردیم، آرگیومنت سوم متد open را به صورت true قرار دهید تا ارسال درخواست ای جکس جدید منوط به دریافت پاسخ درخواست قبلی نباشد، بحث دیگر استفاده از setTimeout و ایجاد وقفه است که باید دقت داشته باشید، متاسفانه اگر مقدار این متد را 0 قرار دهیم کد با مشکل روبرو می شود که پیدا کردن علت و رفع آن به زمان بیشتری نیاز دارد و به جهت محدودیت فرصت متاسفانه برایمان مقدور نیست! در کل در سیستم های چت معمولا با هر درخواست، پیام بلافاصله به سرور ارسال و بلافاصله نیز پاسخ برگردانده می شود، در حالتی که کاربر پیامی نمی فرستد می توانید به فرض هر 5 ثانیه با ای جکس وضعیت سرور را برای وجود پیام جدید چک کنید.
تشکر میکنم بابت تمام راهنمایی هایی که در حق بنده انجام دادید.
یه سوال و مشکل اساسی واسم در ایجکس پیش اومده و امیدوارم باز هم راهنماییم کنید...
من یک چت روم ساختم یک چت روم تستی برای تمرین کردن ترفند Comet در ایجکس که امیدوارم آموزش در این زمینه در وبگو قرار بگیرد خب من گفتم هر 20 ثانیه یک بار درخواستی با این عنوان "بدست آوردن پیام های جدید از دیتابیس" و قبل اینکه ایجکس رو سند کنم یک تایم اوت براش در نظر گرفتم که بیست ثانیه باشه (که اگه پاسخی از سرور دریافت نشد از درخواست صرف نظر شود) حالا در سمت سرور وارد یک حلقه بینهایت شدم البته با استفاده از تابع sleep که هر بار 1 ثانیه حلقه رو متوقف میکنه خب تو حلقه یک سلکت نوشتم که بره از دیتابیس پیام جدید رو بخونه که با فیلد last_update پیام های جدید رو بدست میارم که اگر پیام جدیدی بود اونو سرور میفرسته و حلقه رو متوقف میکنه اما اگه پیام جدیدی نبود حلقه تا 20 دفعه تکرار میشه و هربار یک سلکتی انجام میده در صورت وجود رکورد جدید ارسال میکنه و حلقه متوقف میشه و اگه تو این مدت 20 ثانیه هیچ پیامی نیومد حلقه باز هم متوقف میشه خب تا اینجا عالی پیش رفتم اما قسمت جاوا اسکریپت که داده رو دریافت میکنه هم گفتم اگه جیسون جدیدی سمت کلاینت (جاوا اسکریپت) اومد پیام جدید رو نمایش میده و با استفاده از این دستور اون تایم اوت رو متوقف میکنم
window.clearTimeout(mytimeout);
و مجدد فانکشن ایجکس رو فراخوانی میکنم و اینگونه میشه که اگه جوابی اومد اون بیست ثانیه تایم اوت متوقف میشه و درخواست جدیدی ارسال میگردد.خب تا اینجا هم کاملا عالی پیش رفتم اما وقتی خواستم یه متد فانکشن جدیدی تحت عنوان ایجکس ایجاد کنم برای send_message خب کاربر هر پیامی که بفرسته این متد ارسال میشه البته بدون Comet چون نیازی به این کار نیست حالا یه مشکلی پیش میاد:
وقتی قراره فانکشن send_message فراخوانی بشه اول منتظر میمونه تا فانکشن قبلی که get_message بود و درحالت pending... قرار دارد درخواستش به جواب برسه بعد درخواست send_message ارسال میشه یعنی حتما باید درخواست قبلی ایجکس تموم بشه و درخواست جدید ارسال بشه و باز هم من اینجاشو تواناییشو دارم که درخواست قبلی ایجکس رو متوقف کنم با استفاده از
xhr.abort();
خب حالا مجدد گفتم وقتی قراره send_message فراخوانی بشه درخواست قبلی متوقف بشه یا صرف نظر بشه بعد درخواست جدید ارسال بشه اما با این حال درخواست قبلی صرف نظر میشه اما درخواست جدید هم بعد 10 ثانیه ارسال میشه نمیدونم چرا !!! با این حال بازم وقفه وجود دارد ! شما هر راهی که به ذهنم رسید انجام دادم که نهایت به شما روی اوردم حتی فایل قسمت comet با فایل ajax not comet رو جدا کردم بازم وقفه در زمان سند مسیج وجود دارد دلیل چیست ؟؟اینم کد ها
توجه من از دیتابیس استفاده نکردم و از فایل ها در این زمینه استفاده کردم و برنامه رو در localhost xamp اجرا میکنم و کد هایی که فرستادم کامل نیستند فقط بخش های لازم رو فرستادم با تشکر
حذف شد
و اینم کد های پی اچ پی سمت سرور قسمت get_messageحذف شد
$.post('user_panel/codes.php', myArray:myArray},function(data){
$(".box2").html(data).show();
});
array = [];
array[0] = 'value 1';
array[1] = 'value 2';
$.ajax({
type: "POST",
data: {array:array},
url: "index.php",
success: function(result){
$('#result').html(result);
}
});
همچنین می توانید پارامترهای آرایه را به صورت JSON ارسال کنید، لطفا در این زمینه در وب جستجو نمائید، در حال حاضر در خصوص جی کئوری آموزشی در سایت مطرح نمی شود.برای ساختن ربات تلگرام نیاز به برنامه نویسی سمت سرور و سپس برقراری ارتباط این برنامه با api تلگرام است. برای دریافت مسیج هایی که کاربران به ربات ارسال می کنند، دو روش وجود دارد: یکی از این دو روش، webhook است که بنا به الزام تلگرام می بایستی روی یک دامین دارای ssl قرار داشته باشد تا تلگرام خودش به محض اینکه کاربر مسیجی به ربات ارسال کرد آن مسیج را به صورت درخواست http به کدهای php صاحب ربات ارسال کند. اما من از هاست رایگان و زیردامنه استفاده می کنم و ssl ندارم پس مجبورم از روش دومی که تلگرام برای دریافت مسیج ها مشخص نموده یعنی getupdate استفاده کنم که باید از سمت سرور خودم یک درخواست http به api تلگرام ارسال کنیم تا در پاسخ، آخرین مسیج ها را بصورت json دریافت کنم. بازه زمانی تکرار این درخواستها بستگی به نیاز خودمان و نوع ربات مان دارد که طبیعتا اگر بخواهبم ربات به صورت همیشه آماده به کار باشد باید این بازه را کسری از ثانیه قرار دهیم. حال مشکل بنده این است که برای ارسال درخواست نمیدانم از چه راهکاری استفاده کنم تا از هاست رایگانم که امکان cron job هم ندارد بتوانم بدون نیاز به مرورگر، در طول شبانه روز در بازه های بسیار کوتاه درخواست ارسال کنم و پاسخ درخواست ها را به کدهای php خودم ارسال کنم تا در مسیر پردازش قرار بگیرند؟ کاری که فعلا کرده ام باز گذاشتن یک مرورگر و دائم به اینترنت وصل بودن و گذاشتن یک کد رفرش جاوا در صفحه است!! چطور میتوانم از هاست رایگانم به طور دائم مثلا هر ثانیه 10 بار درخواست ارسال کنم؟ (هر دو متد get و post و روش های زیر در پاس دادن پارامترها توسط api تلگرام پشتیبانی می شود:
URL query string
application/x-www-form-urlencoded
application/json (except for uploading files)
multipart/form-data (use to upload files)
ممنون
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.