article

ذخیره و نمایش اطلاعات فایل با ای جکس (Ajax) و PHP

ajax-php-txt-file

در وب اگر بخواهیم اطلاعاتی را از سمت کاربر (Client) ارسال و در سمت سرور (Server) در فایلی ذخیره کنیم یا برعکس اطلاعات فایلی را از سرور خوانده و بدون رفرش صفحه در سمت کاربر نمایش دهیم، بی تردید گزینه مناسب انجام این فرآیندها استفاده از قابلیت های ای جکس (Ajax) خواهد بود، ای جکس به عنوان فناوری که می تواند واسط بین سمت کاربر و سمت سرور باشد به خوبی جایگزین روش های متداول که مبتنی بر رفرش و بارگذاری مجدد صفحه هستند می شود، گفتیم که تکنیک ای جکس مبتنی بر جاوا اسکریپت است و لذا در سمت کاربر علاوه بر متدهای ای جکس باید از دستورات جاوا اسکریپتی نیز استفاده کنیم، در سمت سرور نیز نیاز به زبان های برنامه نویسی سمت سرور نظیر PHP است که مقادیر ارسال شده از ای جکس را دریافت و در فایل ذخیره نموده یا مواردی را از فایل خوانده و در پاسخ درخواست ای جکس به سمت کاربر ارسال نماید، با این توضیح در آموزش پیش رو در خصوص نحوه ذخیره و نمایش اطلاعات فایل با ای جکس (Ajax) و PHP صحبت خواهیم کرد.

تابع فراهم سازی امکان ارسال درخواست ای جکس (Ajax)


همانطور که در آموزش های مقدماتی برنامه نویسی ای جکس (Ajax) گفتیم، برای ارسال پارامترها یا دریافت پاسخ سرور به واسطه دستورات ای جکس قبل از هر کاری ابتدا باید شرایط ارسال درخواست را فراهم کنیم که معمولا این ساز و کار در مفسر جاوا اسکریپت مرورگرها با استفاده از آبجکت (object) یا شی XMLHttpRequest ایجاد می شود و به این صورت می توانیم درخواست را در بستر ای جکس از مرورگر به سرور ارسال یا پاسخ را از سرور دریافت و در مرورگر پردازش کنیم، به هر صورت از آنجایی که مرورگر اینترنت اکسپلورر در نسخه های قدیمی (ماقبل 7) از متدهای خاص خود استفاده می کند برای نوشتن تابع فراهم سازی امکان ارسال درخواست ای جکس (Ajax) سازگار با این مرورگر و خطایابی ساده تر معمولا از روش try و catch استفاده می کنیم، در نمونه کد زیر تابع فراهم سازی امکان ارسال درخواست ای جکس (Ajax) سازگار با نسخه های قدیمی مرورگر اینترنت اکسپلورر را درج کرده ایم:
<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;
            }
        }
    }
    
    //return
    return xmlHttp;
}
</script>
به این صورت هر زمان که تابع را فراخوانی کنیم در پاسخ یک شی XMLHttpRequest ساخته می شود (مرورگر اینترنت اکسپلورر در نسخه های ماقبل 7 از قابلیت ActiveXObject استفاده می کند).
این نمونه کدها را می توانیم در فایلی با نام دلخواه ajax_request.js ذخیره و در صفحه وارد کنیم یا اینکه کدها را به صورت مستقیم در صفحه HTML درج کنیم.
نکته: در هنگامی که کدهای جاوا اسکریپتی را در فایل های مستقل با فرمت js درج می کنیم قاعدتا تگ های script باید حذف شوند، با این توضیح دقت کنیم که اگر تابع را در فایل ajax_request.js درج می کنیم نباید به همراه تگ های script باشد!

کدهای ارسال درخواست و دریافت پاسخ با ای جکس (Ajax)


پس از اینکه شرایط درخواست ای جکس را با کمک آبجکت XMLHttpRequest مهیا کردیم به کدهایی نیاز داریم که ارسال، دریافت و نمایش اطلاعات را مدیریت کنیم، برای این کار از نمونه کد زیر استفاده می کنیم:
<script>
//ارسال اطلاعات فیلدها و ذخیره در فایل متنی
function sendRequest(id){
    var ajax_request = ajaxRequest();
    var php_file = 'php-file.php';
    var value = document.getElementById(id).value;
    
    ajax_request.onreadystatechange = function(){
        if(ajax_request.readyState == 4){
            if(ajax_request.status == 200){
                displayContent('مقادیر با موفقیت به سرور ارسال شد!<br>');
            } else{
                displayContent('دریافت خطا! HTTP کد: ' + ajax_request.status + '<br>');
            }
        } else{
            displayContent('لطفا چند لحظه صبر کنید...<br>');
        }
    };
    
    ajax_request.open("POST", php_file, true);
    ajax_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    ajax_request.send('value=' + value);       
}

//دریافت اطلاعات فایل متنی و فراخوانی تابع نمایش در مرورگر
function receiveResponse(){
    var ajax_request = ajaxRequest();
    var ajax_caching = false;
    var text_file = 'text-file.txt';
    
    ajax_request.onreadystatechange = function(){
        if(ajax_request.readyState == 4){
            if(ajax_request.status == 200){
                displayContent(ajax_request.responseText);
            } else{
                displayContent('دریافت خطا! HTTP کد: ' + ajax_request.status + '<br>');
            }
        } else{
            displayContent('لطفا چند لحظه صبر کنید...<br>');
        }
    };
    
    if(ajax_caching == false){
        text_file = text_file + '?nocache=' + Math.random();
    }
    
    ajax_request.open("GET", text_file, true);
    ajax_request.send(null);
}

//تابع نمایش اطلاعات در مرورگر (بلاک div)
function displayContent(content){
    var show_result = document.getElementById("show-result");
    
    show_result.innerHTML = content;
}
</script>
این کدها را نیز می توانیم در فایلی با نام دلخواه ajax-send-receive.js ذخیره کنیم.
توضیح:
- در این کد سه تابع تعریف شده است، تابع sendRequest، receiveResponse و displayContent که هر کدام مربوط به بخش خاصی از فرآیند ارسال، دریافت و نمایش اطلاعات با ای جکس است.
- تابع sendRequest درون خود تابع فراهم سازی امکان درخواست ای جکس (ajaxRequest) را فراخوانی می کند، در هنگامی که حالت آماده یا نتیجه متد readyState برابر 4 است وضعیت پاسخ سرور با متد status بررسی می شود، اگر مقدار status برابر 200 باشد یعنی مشکلی در سمت سرور وجود ندارد اما اگر هر کدی به جزء 200 دریافت شود یعنی در فرآیند پردازش درخواست در سرور و کدهای PHP مشکلی رخ داده است، به طور مثال دریافت کد خطای HTTP 404 یعنی منبع درخواستی از سرور یافت نشده است، در ادامه تابع displayContent فراخوانی شده که وظیفه ی آن نمایش اطلاعات مد نظر ما در بلاک div مورد نظر است.
- برای جلوگیری از ذخیره سازی احتمالی درخواست های GET یا به اصطلاح کش (Cache) شدن ناخواسته اطلاعات از پارامتر دلخواه nocache با مقادیر اتفاقی در آدرس URL استفاده کرده ایم که در تابع receiveResponse به صورت متغیر ajax_caching مشخص است، مقادیر اتفاقی باعث می شود مرورگر در هر درخواست مشابه آدرس URL جدید رفتار کند و اطلاعات به صورت خودکار تازه سازی (Refresh) شوند، این کار از ذخیره سازی موقت یا Caching درخواست های  ای جکس در مرورگر جلوگیری می کند.
- تابع displayContent با متد جاوا اسکریپتی innerHTML محتویات مد نظرمان را در بلاک div با آی دی تعریف شده (در اینجا show-result) مقداردهی می کند.
- مقادیر responseText در تابع receiveResponse محتوایی است که از فایل txt خوانده می شود، در واقع درخواست ای جکس محدود به فایل های PHP نیست و می توانیم محتوای فایل های متنی را نیز به عنوان نتیجه درخواست دریافت کرده و به نحو دلخواه پردازش کنیم.

دستورات PHP برای دریافت مقادیر و ذخیره در فایل متنی


همان طور که به کارگیری ای جکس (Ajax) در سمت کاربر مستلزم استفاده از جاوا اسکریپت است، در سمت سرور نیز باید از زبان های برنامه نویسی قابل اجرا در سرور نظیر PHP بهره بگیریم، با دستورات PHP می توانیم مقادیر ارسالی از طریق متدهای متداول POST یا GET را دریافت کرده و پردازش مورد نظر را روی آنها اعمال کنیم، به طور مثال در نمونه کد زیر اطلاعات دریافتی از درخواست ای جکس در فایل فرضی text-file.txt ذخیره می شود:
<?php
@$value = $_POST['value'];
$text_file = 'text-file.txt';

file_put_contents($text_file, $value);
?>
این فایل را با نام php-file.php در کنار سایر فایل ها ایجاد می کنیم.
نکته 1: متد استفاده شده در کدهای PHP بستگی به متدی دارد که در درخواست ارسال اطلاعات سمت کاربر برای ای جکس استفاده شده است (در اینجا متد POST).
نکته 2: تابع استفاده شده در کدهای PHP برای ذخیره سازی اطلاعات در فایل متنی تابع درونی و از پیش تعریف شده file_put_contents است.
https://www.php.net/manual/en/function.file-put-contents.php

کدهای HTML سمت کاربر و پیش نمایش آنلاین


توابع جاوا اسکریپتی را می توانیم به نحو دلخواه با رویدادها (Events) در سمت کاربر فراخوانی کنیم، به طور مثال رویداد onload با بارگذاری کامل صفحه اجرا می شود یا با اختصاص رویداد onclick به دکمه (Button) تابع پس از کلیک کاربر فراخوانی می شود، به هر صورت شیوه و زمان فراخوانی بستگی به نیاز و هدف برنامه دارد به طور مثال در کدهای HTML صفحه زیر دو نمونه دکمه جهت ارسال مقادیر از فیلد input به سرور و دریافت اطلاعات فایل متنی از سرور طراحی شده که مبتنی بر رویداد onclick هستند:
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | خواندن و نوشتن فایل متنی با ای جکس (Ajax) و PHP</title>
<!-- Webgoo.ir -->
<style>
body {
    font-family: Tahoma, Geneva, sans-serif;
    font-size: 12px;
    direction: rtl;
    line-height: 22px;    
}
#show-result {
    background: #999999;
    color: #FFFFFF;
}
</style>
<script src="ajax-request.js"></script>
<script src="ajax-send-receive.js"></script>
</head>
<body>
<noscript>جاوا اسکریپت در مرورگر شما غیر فعال است یا پشتیبانی نمی شود!</noscript>
<label for="ajax-input">ابتدا یک مقدار متنی در این فیلد وارد کنید:</label>
<input name="ajax_input" id="ajax-input"><br><br>
<button onclick="sendRequest('ajax-input');">ارسال مقادیر</button>
<button onclick="receiveResponse();">دریافت اطلاعات</button><br><br>
<div id="show-result">پاسخ های برنامه در این بلاک نمایش داده می شود.</div>
<hr>
- با فشردن دکمه "ارسال مقادیر" مقدار از فیلد input دریافت و از طریق تابع sendRequest به فایل php-file.php ارسال و با برنامه نویسی PHP در فایل متنی text-file.txt ذخیره می شود.<br>
- با فشردن دکمه "دریافت اطلاعات" مقدار از طریق تابع receiveResponse از فایل متنی text-file.txt دریافت و در بلاک show-result نمایش داده می شود.<br>
- وظیفه نمایش پاسخ های برنامه را تابع displayContent بر عهده دارد.<br>
- برای نوشتن فایل متنی از Ajax + PHP و برای خواندن اطلاعات فایل متنی از Ajax استفاده کرده ایم.
</body>
</html>
پیش نمایش آنلاین

دانلود نمونه فایل های آموزش


در صورت تمایل به تست و بررسی نمونه کدهای ارائه شده در این آموزش در لوکال هاست یا سرور شخصی و جهت سهولت کار می توانیم بسته زیر را در قالب فایل فشرده دریافت کنیم، این بسته حاوی فایل های زیر است:
- ajax-request.js، فایل فراهم سازی امکان ارسال درخواست ای جکس.
- ajax-send-receive.js، فایل حاوی توابع ارسال، دریافت و نمایش اطلاعات با ای جکس.
- text-file.txt، فایل متنی جهت ذخیره و دریافت اطلاعات.
- php-file.php، فایل PHP حاوی دستورات برنامه نویسی جهت نوشتن مقادیر ارسالی کاربر در فایل متنی.
- ajax-send-receive.html، فایل HTML جهت اجرا در مرورگر و تست.
دانلود نمونه فایل های آموزش
نکته: آدرس فرخوانی فایل ajax-send-receive.html در لوکال هاست به صورت نمونه زیر خواهد بود:
http://localhost/ajax-php-text-file/ajax-send-receive.html
sectionدسته بندی: آموزش مقدماتی » Ajax
related مطالب بیشتر:
» آموزش ای جکس (Ajax)، تکنیک غیرهمزمانی در وب
» نمایش پیام در حال بارگذاری با ای جکس (Ajax)
» فریم ورک های ای جکس (Ajax Frameworks)
» نمایش افکت fade in با ای جکس (Ajax)
» ارسال و دریافت اطلاعات با متد GET و POST در ای جکس (Ajax)
commentنظرات (۱۷ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: Hesam
۱۶:۰۷ ۱۳۹۱/۱۰/۲۱
سپاس از پاسخ حضرتعالي ، چون تعداد آيتم ها زياد هست نمي تونه بصورت دستي كپي كنه ... يك گروه 6,7 نفري براي بروز رساني از صبح ساعت 8 تا 5 بعدازظهر در حال فعاليت هستند .
كه ايشان زحمات همه را به راحتي بالا ميكشه !
آيا روشي وجود دارد كساني كه به سايت من File_Get_Contents يا CURL مي كنند را شناسايي و در ديتابيس ذخيره كنم ؟
بنده حدود 5 ماه پيش از شما در رابطه با بارگذاري محتوا بدون رفرش شدن صفحه كمك گرفتم و راهنمايي هاي شما مشكل منو رفع كرد .
در صورت امكان مي خواستم از طريق ايميل موضوع را با شما در ميان بگذارم .
پاينده باشيد
پاسخ: 
مهم نیست فرد از چه تابعی برای فراخوانی صفحات شما استفاده می کند (file_get_contents يا CURL تنها توابع و روش در برنامه نویسی PHP هستند) چون از نظر سرور سایت شما، یک درخواست عادی محسوب شده و اطلاعات لینک درخواست شده در پاسخ داده می شود، لذا بر روی اینکه فرد از چه تکنولوژی استفاده می کند نباید متمرکز شوید، آنچه که باعث شناسایی کاربران می شود یا واسط کاربری آنها است مانند اطلاعات مرورگر یا هر سیستم دیگری که صفحات وب را فراخوانی کند مانند ربات های خزنده، به طور مثال واسط کاربری ربات گوگل با عبارت زیر مشخص می شود:
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
حال اگر در کد htaccess به جای bot بنویسید Googlebot، تمام واسطه های کاربری که داخل آنها این عبارت باشد، خطای 403 دریافت می کنند، و یا IP آنها است که با آن به سرور شما درخواست ارسال می کنند، خارج از این نمی توان کار خاصی کرد.
شاید درج لینک در محتوا بهترین گزینه برای شما باشد، در محتوا لینک درج کنید تا کاربران سایت مذکور به منبع اصلی مطالب مراجعه کنند.
نویسنده: مازیار
۱۱:۱۳ ۱۳۹۱/۱۰/۲۲
کسی که که از این توابع برای فراخوانی استفاده می کند با چند replace می تواند لینک را از متن حذف کند به نظرم بهترین حالت این است که تگ کلیدی که باعث دزدی می شود را متغیر کرد به طور مثال اگر کد فراخوانی با تگ table کار می کند کاری کرد که در هر بار باز شدن صفحه بین 1 تا 4 کد table به صورت رندم ایجاد شود تا کلید از بین برود و سورس html متغیر شود اگر سورس ثابت نداشته باشیم کدی هم برای دزدی نمی توان نوشت
پاسخ: 
ممنون از پیشنهاد بسیار خوب شما، البته این روش هم ممکن است صد در صد مانع دزدی نشود، چون تگ های HTML از مطالب به راحتی قابل تفکیک است، ولی بسته به مهارت فرد تا حدودی جوابگو است.
نویسنده: مازیار
۱۲:۵۲ ۱۳۹۱/۱۰/۲۲
مورد دیگری که به ذهن بنده رسید این است که استنفاده از HTACCESS فایده ای ندارد به این دلیل که معمولا برای فرخوانی به طور روزانه از CRONJOB استفاده می شود اگر شما مشخصات را پیدا کنید و بلوک کنید به سادگی با استفاده از هاست های رایگان سیستم را تغییر می دهند و مجددا باید مشخصات جدید را جایگزین کرد که این مورد دردسر کامل به شمار می اید من در سایت بورس ایران دیدم که اسکریپت قیمت هایی که داده بودن خاصیت عجیبی داشت تمام ساختار فراخوانی می شد ولی اعداد فراخوانی نمی شد نمی دانم چگونه این کار را کرده بودند ولی سیستم جالبی بود اگر اطلاعی دارید لطفا بفرمایید بنده هم استفاده کنم
پاسخ: 
به طور کلی می توان این نوع کارها را با ترکیب جاوا اسکریپت و ای جکس انجام داد (به فرض اعداد را با Ajax از سرور دریافت کرد و به جای خروجی مستقیم، از طریق متد innerHTML به خروجی ارسال کرد، در این صورت اعداد در سورس صفحه نشان داده نمی شوند ولی در مرورگر نمایش داده می شوند)، معمولا هم از کتابخانه جی کئوری بدین منظور استفاده می شود.
به این صورت بخش اصلی صفحه برای موتورهای جستجو (و سایر ربات ها) قابل ایندکس است ولی بخش جاوا اسکریپتی که شامل اعداد است، قابل ایندکس نیست.
نویسنده: مازیار
۱۵:۰۸ ۱۳۹۱/۱۰/۲۲
نکته جالبی هست اگر امکان داره یک مثال و آموزش برای این مورد در سایت قرار دهید گمان کنم برای افرادی مثل من و اقای حسام بسیار مفید باشد
ممنون میشم مثالی باشه که مثلا 10 عدد را وقتی وارد صفحه میشی در جاهای مختلف صفحه نمایش بده
پاسخ: 
در آموزش های کاربردی ای جکس مطالبی مرتبط به این موضوع وجود دارد، اگر کافی نبود اطلاع دهید تا یک مثال مشابه آنچه می خواهید نوشته شود.
نویسنده: مازیار
۱۶:۲۱ ۱۳۹۱/۱۰/۲۳
من یک نمونه ساختم مشکل تا حدی حل شد ولی در سورس در بخش اسکریپت اعداد نمایش داده می شود لطفا به لینک زیر بروید و سورس را مشاهده کنید ببینید راه حلی برای این مشکل دارید ممنون
http://rayanide.com
پاسخ: 
راه حل آن استفاده از ای جکس است، ای جکس نتایج (اعداد) را از سرور (کدهای PHP) دریافت می کند و بدون اینکه در سورس صفحه HTML دیده شود، در بلاک آن را نمایش می دهد.
نویسنده: maryam
۱۱:۵۲ ۱۳۹۲/۰۲/۲۸
با سلام
و باز هم ممنون از مطالب مفیدتون
کد شما رو اجرا کردم جواب مورد نظر رو نگرفتم چک کردم دیدم ajax_request.status صفر ست میشه!
و خط ajax_request.responseText
(در فایل ajax-send-receive.js) اجرا نمیشه!
لطفا راهنمایی کنید
پاسخ: 
ابتدا باید مطابق آموزش فایل ها را در کنار هم ایجاد کنید، یعنی این فایل ها:
ajax_request.js
ajax-send-receive.js
text-file.txt
php-file.php
ajax-send-receive.html
اگر تمام موراد را صحیح انجام دهید کد تست شده و عمل می کند، برای خطایابی می توانید تابع به تابع رد اجرای کد را دنبال و با alert مقادیر را بررسی کنید تا اشکال کار مشخص شود.
نویسنده: maryam
۱۲:۲۸ ۱۳۹۲/۰۲/۲۸
یه سوال دیگه هم داشتم
فایل تصویری رو هم میشه از این طریق نمایش داد؟
و اینکه ممنون میشم در مورد امکان ذخیره کردن این فایل هم راهنمایی کنید منظورم اینکه کاربر این امکان رو داشته باشه که مثلا بعد از اینکه button رو زد پنجره ای باز بشه که save یا open کردن فایل رو انتخاب کنه
پاسخ: 
برای نمایش تصویر کافی است در پاسخ، کد نمایش را به درخواست آژاکسی تحویل دهید، به فرض به جای متن، پاسخ به این صورت باشد:
<img src="image/example.jpg" alt="example" height="600" width="800">
اما برای اینکه تصویر به صورت قابل ذخیره برای کاربر باشد نمی توانید از آژاکس استفاده کنید، بلکه ابتدا باید یک فایل PHP با نام فرضی download-image.php داشته باشید که مشابه دستورات زیر در آن باشد:
<?php 
$file = 'example.jpg';
header('Content-Description: File Transfer');
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename= ".$file."");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile($file);
?>
و سپس در سمت کاربر و در کدهای جاوا اسکریپت از نمونه کد زیر استفاده کنید:
function DownloadImage(){ 
var file_url = "http://localhost/download-image.php";
document.location = file_url;
}
به این ترتیب با کلیک کاربر بر روی دکمه، تابع فرضی DownloadImage فراخوانی شده و این تابع فایل PHP را فراخوانی می کند و فایل، تصویر را به عنوان خروجی به صورت قابل دانلود به کاربر نشان می دهد.
نویسنده: maryam
۲۲:۳۱ ۱۳۹۲/۰۲/۲۸
در مورد سوال اول من تابع ها رو چک کرده بودم و همانطور که خدمتتون عرض کردم Request.status صفر است.
Request.status نامساوی 200 است و خط
var content = Request.responseText
اجرا نمیشه!
ممنون که وقت میذارید
پاسخ: 
اینکه وضعیت برابر صفر است یعنی هیچ درخواستی ارسال نشده و در واقع شی Request به درستی اجرا نشده است، به هر صورت کد تست شده و مشکلی ندارد، باید ببینید کجای کار را اشتباه انجام می دهید.
نویسنده: كميل
۰۰:۱۹ ۱۳۹۲/۰۷/۲۸
سلام و ممنون از زحمتي كه مي كشيد
يه سوالي در مود اين آموزشتون برام پيش اومده اونم اينه كه در صفحه php-file.php شما چيزي را echo نكرده ايد... پس مقداري كه درون responseText قرار مي گيرد از كجا مي آيد؟ در واقع صفحه php ما خروجي ندارد (اگر اشتباه نكنم)
اگر هم فرضا متغيرهاي ساخته شده در صفحه را به عنوان خروجي مي گيرد از كجا مي فهمد كه كدام متغير به عنوان خروجي در نظر بگيرد؟
ببخشيد اگه سوالم خيلي مبتديانه بود ... ممنون ميشم اگه كامل جواب بديد
پاسخ: 
ابتدا با یک درخواست فایل PHP با نام فرضی php-file.php فراخوانی می شود که این فایل مقادیر را از فیلد input دریافت و در فایل متنی text-file.txt کپی می کند، سپس تابع receiveResponse فراخوانی شده و اطلاعات از text-file.txt با متد GET دریافت می شود.
نویسنده: علی
۱۷:۲۶ ۱۳۹۲/۱۱/۱۳
اقا سلام
ما می خواهیم مقادیر
var x = ?
را از طریق ajax
به یک فرم دیگر مثلا
123.php
ارسال کنیم
میشه راهنمایی بفرمایید چطوری این کار ممکنه و در ضمن این داده ها درون فرم نیستند

در ضمن از راهنمایی قبلی تون هم بسیار بسیار سپاسگذارم
پاسخ: 
لطفا به آموزش های مقدماتی Ajax مراجعه کنید، این موارد جزء نکات مقدماتی ای جکس است.
نویسنده: علی
۱۶:۱۱ ۱۳۹۴/۰۲/۱۹
با سلام. یه نکته ای هست برای کسانی که با لوکال هاست کار می کنند. این که باید در صفحه ی پی اچ پی حتما از هدر زیر استفاده کنند و گرنه جواب نمی گیرند.
header("Access-Control-Allow-Origin:*");
با تشکر
پاسخ: 
البته این سربرگ HTTP معنی خاصی دارد و معمولا زمانی استفاده می شود که اطلاعات بین دو دامنه به اشتراک گذاشته شوند (به فرض لوکال هاست و یک سرور آنلاین)، لذا زمانی که تمام فرآیند در یک سایت یا لوکال هاست انجام شود نیاز خاصی به این سربرگ HTTP نخواهد بود، در غیر اینصورت باید مشکل از مورد دیگری باشد!
نویسنده: مهدی
۲۳:۵۷ ۱۳۹۵/۰۸/۰۷
سلام
آیا نوشتن این خط کد
var content = Request.responseText;
Display(content, showresult);
ضروری است؟ می توان بجای استفاده از تابع دیسپلی فقط نوشت ؟
showresult.innerHTML=request.responseText
پاسخ: 
بله هیچ تفاوتی نمی کند! البته بهتر است کدهایتان را همیشه تا حد ممکن به صورت تابع بندی شده بنویسید (قسمت هایی که کارهای جداگانه یا تکراری انجام می دهند درون توابع جداگانه باشند) چون این کار علاوه بر اینکه درک و بازخوانی دستورات را ساده تر می کند، روند توسعه برنامه ها را در پروژهای بزرگ و حرفه ای سرعت می بخشد!
نویسنده: مهدی
۲۳:۵۹ ۱۳۹۵/۰۸/۰۷
سلام
این خط کد دقیقا چه کار می کنه؟
if(AjaxCaching == false){
url = url + "?nocache=" + Math.random();
و آیا اگه نباشه و ما کلا از متغیر ajaxCashing استفاده نکنیم مشکلی پیش میاد؟
پاسخ: 
این قسمت یک عبارت تصادفی (به صورت یک پارامتر در متد GET) به انتهای آدرس URL درخواستی اضافه می کند، با این کار مرورگر در هر درخواست از سرور، آخرین تغییرات را دریافت می کند و عمل کش شدن (ذخیره موقت داده ها در مرورگر) صورت نمی گیرد، برای اطمینان از اینکه نتیجه دریافتی دقیقا همان آخرین تغییرات در سرور است، این قسمت باید باشد، در غیر اینصورت ممکن است نتایج به روز نشوند و به اصطلاح کش شوند!
نویسنده: حسين
۱۵:۰۹ ۱۳۹۷/۰۲/۱۲
سلام ممنون از آموزشات خوبتون (^_^)
من ميخوام يک فايل رو با آژاکس آپلود کنم يعني کاربر يک فايل انتخاب کنه و آپلود کنه راهي هست؟
پاسخ: 
در حال حاضر آپلود فایل با صرف Ajax از طریق آبجکت FormData و HTML5 امکانپذیر است.
https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects
ممکن است این قابلیت در نسخه های قدیمی مرورگرها پشتیبانی نشود به همین دلیل فعلا برای سازگاری کامل می توانید از jQuery استفاده کنید (لطفا در وب جستجو کنید).
نویسنده: محمود
۱۰:۱۶ ۱۳۹۷/۰۶/۱۷
با سلامی دوباره.
با این فرم :
حذف شد
به صفحه save.php زیر اطلاعات را می فرستم و یک فایل متنی test.txt ایجاد می شود.
حذف شد
حالا من لازم دارم به جای اطلاعات فرم اطلاعات داخل یک تک div مثلن متن و جدول را به صفحه save.php ارسال و فایل متنی بسازم. من در اثر مطالب آموزشی اجکس سایتتان و همینطور در همکارهایتان گشتم و بیشتر ارسال اطلاعات داخل فرم یا تکست که name دارند قابل ارسال بود و البته این از کمی دانش من نیز است. لطفن کمک کنید . تا کاربر با زدن دکمه send محتوای مثلن اطلاعات زیر
حذف شد
را به save.php ارسال شود تا فایل متنی test ساخته شود.
متشکر می شوم . خیلی اسیر شدم. اگر خواستید ایمیل کنید.!
پاسخ: 
ابتدا باید با نحوه دریافت و ارسال پارامترها از طریق متد POST و GET به سرور با Ajax آشنا شوید، سپس می توانید به جای اطلاعات فیلدهای input، هر مقدار متنی دیگر که مد نظرتان بود را ارسال کنید، برای دریافت اطلاعات نیز می توانید به تگ مورد نظر ID اختصاص داده و از متدهای innerHTML یا innerText در جاوا اسکریپت استفاده کنید، به فرض:
var test = document.getElementById('test').innerHTML;
و از این متغیر که اطلاعات را در خود دارد در درخواست Ajax استفاده کنید:
var params = "name=" + test;
xmlHttp.open("POST", "index.php", true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.send(params);
قاعدتا اینها فقط بخشی از کدها است و در صورت آشنایی با Ajax راهگشا خواهد بود.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





8 × 3
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form بنیامین
در:
درود. وقت بخیر. من یک سوالی از خدمتتون داشتم؟ من می خوام وقتی کاربر بنویسه بدون اینکه URL تغییر کنه. و اینکه چطوری بعد...
۱۳۹۹/۱۱/۰۷

form مهدی
در:
خیلی ممنون آموزش خیلی خوبی بود
۱۳۹۹/۱۱/۰۷

form علی
در:
سلام تشکر میکنم از شما و سایت فوق العاده عالی تون مشکلم حل شد تشکر میکنم موفق باشید
۱۳۹۹/۱۱/۰۵

form rofa
در:
سلام خسته نباشید خیلی ممنونم از مطالب خوبتون.. ببخشید علامتی که در سمت راست همین سایت هستش چجوری تغییر جهت میده با اسکرول کردن...
۱۳۹۹/۱۱/۰۵

form علی
در:
با سلام تشکر از سایت خوبتون و اموزشای خوبی که قرار میدین یک سوال داشتم من میخوام از یک فایل رشته ای همانند :...
۱۳۹۹/۱۱/۰۵

form علی
در:
با سلام سایت هایی من میخوام اطلاعاتی از سایتی بگیرم اما این سایت پس از چند ثانیه این اطلاعات رو به من نشون میده و...
۱۳۹۹/۱۱/۰۴

form شیدا
در:
سلام برای اینکه بتونم جدول ضرب 1 در 5 رو بنویسم چه کدهایی باید بنویسم؟
۱۳۹۹/۱۱/۰۳

form امیرحسین
در:
چرا استاد خیلی فرق داره الان کد زیر را شما در نظر بگیرید بین 0 تا 1 ثانیه طول میکشه اجرا شدنش خب شما...
۱۳۹۹/۱۱/۰۲

form امیرحسین
در:
سلام استاد حالتون چطوره، من یه سوال داشتم: تو پروژه های بزرگ که یک ارایه معمولا 20 عنصری یا نهایت 100 عنصری داشته باشیم...
۱۳۹۹/۱۱/۰۲

form کوثر رحیمی
در:
سلام ا ز راهنماییتون ممنونم من تازه وبلاگم رو درست کردم ۱۲ سالمه هر کاری می کنم فیلم در اون قرار نمیگیره همش این خطا...
۱۳۹۹/۱۰/۲۹

form متین
در:
سلام و خسته نباشید من بخوام داده ای که از قبل موجوده رو با متد پست به یک فایل ارسال کنم چجور میشه؟ یعنی...
۱۳۹۹/۱۰/۲۷

form روشنا
در:
سلام ما یه وبلاگ گروهی داریم مختص املاک فایل های جدید و حتی قالب جدید اصلا اعمال نمیشه . حتی راهنمایی که کرده...
۱۳۹۹/۱۰/۲۷

form علی
در:
من در یک سایت سازی سایت ساختم یه بخش داره به نام اسکریپت دلخواه می خوام یه اسکریپتی بذارم که مثلا یه موسیقی وقتی کاربر...
۱۳۹۹/۱۰/۲۷

form امیرحسین
در:
بله استاد خیلی ممنون، نمیدونستم خودش Optimize رو انجام میده در کل من بعد از ایندکس گذاری ها همیشه سعی کردم جوری که با...
۱۳۹۹/۱۰/۲۶

form امیرحسین
در:
ُسلام وقت بخیر این کووری هم چون اول قسمت WHERE انجام میشه بعد قسمت ON پس این کووری هم با حالت کووری قبلی برابره
۱۳۹۹/۱۰/۲۶
form امیرحسین
در:
سلام استاد وقت بخیر ممنون از پاسخ گویی های قبلی یه سوال دیگه داشتم: این هم هیچ مشکلی نداره و کار میکنه، ایا...
۱۳۹۹/۱۰/۲۵
form محمد بیدل بازه
در:
سلام خسته نباشید ببخشید من توی یک قسمت سایتم تصویری دارم و میخوام سمت راست اون تصویر متن بنویسم ولی نمیشه تا متن رو...
۱۳۹۹/۱۰/۲۵
form سلام
در:
و اینکه یه تگ خوب برای فونت معرفی کنید و یه تگ دیگه که متن رو (تیتر مطلب (تست)) در ادامش بنویسه نه اینکه...
۱۳۹۹/۱۰/۲۴
form سلام
در:
سلام وبسایتم را نگاه کنید از چه تگی استفاده کنم تا فاصله بین تیتر مطلب جدید را کاهش دهم؟ (از خطی به خط...
۱۳۹۹/۱۰/۲۴
form وطن
در:
سلام. خسته نباشید. خیلی گشتم درباره یک خطا یا ایراد فنی که چند روز هست در سایت نوشته شده با پی اچ پی (اسکریپت اولوشن)...
۱۳۹۹/۱۰/۲۴
form حورارمی
در:
سلام. من هنوز نمیدونم تو تنظیمات باید کجا رو بگردم تا قالب وبلاگم رو با عکس مورد علاقه ام تغییر بدم. یا نمیتونم...
۱۳۹۹/۱۰/۲۳
form راشد
در:
این روش خیلی طولانیه در فروشگاه من یک برنامه گرفتم که یه عکس توش اپلود کن بهت یک لینک میده در ظرف چند ثانیه و...
۱۳۹۹/۱۰/۲۱
form باسلام
در:
باسلام خدمت شما عزیز زحمت کش، من مطلب را تا آخر مطالعه کردم. من وبلاگم بازدیدای زیادی داره چون تمام مطالبش رو خودم مینویسم و...
۱۳۹۹/۱۰/۲۱
form محمود
در:
سلام و عرض ادب من در سایتم یک قسمت تب ایجاد کردم، متن ها را که در تب می نویسم پاراگراف بندی نمی شوند....
۱۳۹۹/۱۰/۲۱
form علی آقابیگی
در:
سلام خسته نباشید ببخشید من می خواستم کد جدید در وبلاگم بزارم بعد اشتباهی رفتم در قسمت ویرایش کدها و بعد بیشتر کدها را پاک...
۱۳۹۹/۱۰/۲۰
form محمد
در:
سلام. من میخوام با جاوا اسکریپت یک کدی بنویسم که وقتی کاربر روی یک دکمه ‏ای کلیک کرد، یک کد تصادفی برای شمارش ارسال...
۱۳۹۹/۱۰/۲۰
form پوریا
در:
سلام خسته نباشید، ممنونم بابت توضیحات خوبتون، یه مشکلی داشتم میخواستم ببینم امکانش هست راهنمایی کنید؟ فرض کنید یه اینطور متنی داریم: ...
۱۳۹۹/۱۰/۱۹
form seyedsobhanmansouri
در:
سلام خسته نباشید من سایتمو طراحی کردم اما به این مشکلات بر میخورم اول اینکه هدر سایتم نمایش داده نمیشه اصلا و بعد...
۱۳۹۹/۱۰/۱۹
form رضا
در:
سلام. ممنون بابت مطالب مفیدتون. این نوع جستجو به سئو سایت لطمه نمیزنه؟؟؟ چون در این مدل جستجو، مقدار impression میره بالا ولی...
۱۳۹۹/۱۰/۱۹
form mahdi
در:
سلام استاد عزیز ، پس بنظرتون بجای وقت گذاشتن برای یادگیری لاراول و وردپرس ، وقت بزارم که عمیق تر php و ساختار mvc...
۱۳۹۹/۱۰/۱۹
form علی
در:
سلام و ممنون بابت وبسایت عالیتون داخل بعضی سایت ها دیدید مثلا یه متنی شروع به تایپ شدن می کنه و وقتی کامل شد...
۱۳۹۹/۱۰/۱۸
form محمد
در:
سلام خدمت شما دوست عزیز سوالم این بود میخاستم چندتا مثال از این تابع و چند تابع دیگه از خودتون رو برام مثال بزنید...
۱۳۹۹/۱۰/۱۸
form محمود رنجبر
در:
سلام برادر مشکل من تو همین سایتی هست که فرستادم وقتی گزینه خانه رو کلیک میکنم و بعد دکمه بک گوشی رو میزنم بالای صفحه...
۱۳۹۹/۱۰/۱۷
form mahdi
در:
سلام استاد عزیز ، بعد از آموزس php با لاراول کار کنیم بهتره ؟
۱۳۹۹/۱۰/۱۶
form رضا
در:
آدرس رو براتون گذاشتم دامنه قبلا روی یه وبلاگ میهن بلاگ بود چند ماه میشه که از میهن بلاگ خداحافظی کردم ولی هنوز که هنوزه...
۱۳۹۹/۱۰/۱۴
form نیلو
در:
سلام... ببخشید بعد طراحی قالب قالب شیشه ایم هست یا نه؟؟؟
۱۳۹۹/۱۰/۱۳
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.