تالار گفتمان مانشت

نسخه‌ی کامل: آیا بدون استفاده از دکمه submit می شود اطلاعات را ارسال کرد ؟
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
آیا ارسال اطلاعات یک form از صفحه ای به صفحه ی دیگر، بدون استفاده از دکمه ی submit امکان پذیر است ؟
من خیلی وارد نیستم ولی جاوااسکریپت هم میتونه خودش بصورت تایمردار اطلاعات را منتقل کنه .
برای ارسال اطلاعات بالاخره باید یه رویدادی تعریف کنی ، مثلا من که میام فرم رو پر میکنم برای نشون دادن پایان ورود اطلاعات باید یه دکمه ای چیزی رو فشار بدم تا اطلاعات ارسال بشن . منتها دکمه ای که از نوع submit تعریف میکنی به طور خودکار اطلاعات رو ارسال میکنه.
دقیقا بگو میخوای چیکار کنی ؟! چرا میخوای submit رو حذف کنی ؟
(04 مرداد 1392 02:16 ب.ظ)Nima Masghadi نوشته شده توسط: [ -> ]دقیقا بگو میخوای چیکار کنی ؟! چرا میخوای submit رو حذف کنی ؟


با یک مثال توضیح میدم :
فرض کنید سه تا صفحه داریم به نام های first_page.php و second_page.php و wellcome.php
در صفحه ی first_page.php داریم :
کد php:
<html>
<
body>
<
form action="second_page.php" method="get">
<
input name="username" type="text" />
<
input name="enter" type="submit" value="ارسال" />
</
form>
</
body>
</
html

در صفحه ی second_page.php داریم :
کد php:
<?php
if ( $_GET['username']==""){
echo 
"please enter username";
}
else
{
header ("location:wellcome.php");
}
?>

و در صفحه ی wellcome.php داریم :
کد php:
<?php
echo "wellcome".$_GET['username'];
?>


می دانیم که اطلاعات صفحه ی اول یعنی ( first_page.php ) با زدن دکمه ی "ارسال" به صفحه ی دوم یعنی ( second_page.php ) فرستاده می شود
اما سؤال من اینه که اگر در صفحه ی دوم شرط if درست نبود ، چجوری میشه اطلاعات دریافتی از صفحه ی اول رو به صفحه ی سوم یعنی ( wellcome.php ) منتقل کرد ؟

ضمنا توجه داشته باشید که از قطعه کد زیر :

کد php:
header ("location:wellcome.php"); 

استفاده شده ! و این یعنی اینکه در صفحه ی دوم ، توقف نداریم ( نمی شود از فرم دیگری در صفحه ی دوم برای ارسال اطلاعات به صفحه ی سوم استفاده کرد ) ... نکته ش هم همین جاست ! آیا راه حلی برای این مسئله وجود دارد یا نه ؟
کارهایی زیادی میشه کرد ، یه دو سالی از php دور بودم ولی یه کاری که به دهنم میرسه استفاده از کوکیه . اطلاعات فرم اولت رو تو کوکی ها ذخیره کن و در آخر کوکی ها رو حذف کن.
این کار رو خیلی راحت با SESSION ها میشه انجام داد :
صفحه second_page.php :
کد php:
<?php
if ( !isset($_GET["username"])){
echo 
"please enter username";
}
else
{
session_start();
$_SESSION["username"]=$_GET["username"];
header ("location:welcome.php");
}
?>

صفحه ی welcome.php :
کد php:
<?php
session_start
();
if(isset(
$_SESSION["username"]))
echo 
"wellcome ".$_SESSION["username"];
else
 echo 
"Welcome unknown user";
?>
(04 مرداد 1392 11:11 ب.ظ)Nima Masghadi نوشته شده توسط: [ -> ]این کار رو خیلی راحت با SESSION ها میشه انجام داد :

tankyou Smile
میتونید از Ajax استفاده کنید و اطلاعاتتون رو بفرستید بدون اینکه کل صفحه رو Submit کنید. البته در این مورد هم باید یک رویداد رو هندل کنید مثلا رویداد onkeyup منتهی دیگه کل صفحه ارسال نمیشه و فقط اون فیلدی که شما اتخاب میکنی فرستاده میشه. اگه خواستید بگید تا بیشتر توضیح بدم (گر چه چیزی نداره اگه هم داشته باشه تو اینترنت پره) موفق و پیروز باشید.
(09 مرداد 1392 08:28 ب.ظ)arcsin نوشته شده توسط: [ -> ]میتونید از Ajax استفاده کنید و اطلاعاتتون رو بفرستید بدون اینکه کل صفحه رو Submit کنید.

اگر ممکنه یه خورده بیشتر توضیح بدین !
(10 مرداد 1392 11:30 ب.ظ)simorghsimorgh نوشته شده توسط: [ -> ]اگر ممکنه یه خورده بیشتر توضیح بدین !

این در واقع ساده ترین مثالی هست که میشه برای استفاده از Ajax زد معمولا اگه چند تا فیلد داشته باشید از JSON استفاده میشه:

این کد در فایل Client.html نوشته میشه :
کد:
<html>
<head>
<title>
    Hello Ajax!
</title>
</head>
<body>
<script language="JavaScript" type="text/JavaScript">
    var requestObject = new XMLHttpRequest();
    
    function execute()
    {
            requestObject.open("GET",
                            "Server.php?text="+
                            document.getElementById("yourname").value,
                            true);
                            
            requestObject.send(null);
            
            requestObject.onreadystatechange = hello
    }
    
    function hello()
    {
        if(requestObject.readyState==4)
        {
            document.getElementById("entered").innerHTML = requestObject.responseText;
        }
    }
</script>
<form name ="form">
    Enter Your Name:
    <input id ="yourname" type="text" name="yourname" onkeyup= "execute()">
    <br/>
    <div id="entered">
        Wait For Response
    </div>
</form>
</body>
</html>

این کد هم در Server.php نوشته میشه:
کد:
<?PHP
    if(isset($_GET['text']))
    {
        echo strtoupper($_GET['text']);
    }
?>

حالا اگه فایل Client.html رو اجرا کنید و در textbox متنی رو وارد کنید بدون اینکه کل صفحه به سرور فرستاده بشه و به اصطلاح submit بشه بزرگ شده ی اون متن در زیرش نوشته میشه . امیدوارم که مثال واضحی زده باشم.
خیلی جالبه ... توی همون صفحه ای که متن نوشته میشه ، متن بزرگ میشه ولی در عین حال یک فایل دیگه Server.php هم باید باشه. میشه این کدها رو بیشتر توضیح بدین که هر قسمت چکار میکنه دقیقا ؟
مخصوصا اینکه من با جاوا اسکریپت اصلا آشنا نیستم.
(11 مرداد 1392 09:25 ق.ظ)simorghsimorgh نوشته شده توسط: [ -> ]خیلی جالبه ... توی همون صفحه ای که متن نوشته میشه ، متن بزرگ میشه ولی در عین حال یک فایل دیگه Server.php هم باید باشه. میشه این کدها رو بیشتر توضیح بدین که هر قسمت چکار میکنه دقیقا ؟
مخصوصا اینکه من با جاوا اسکریپت اصلا آشنا نیستم.

الان تقریبا میشه گفت همه ی سایت ها از Ajax استفاده میکنن مثلا موقع ثبت نام شما userName رو وارد میکنید بلا فاصله زیرش یک پیغام نمایش داده میشه که آیا نام کاربری صحیحه یا قبلا وارد شده :

تو این قسمت یک شی از نوع XMLHttpRequest می سازیم که وظیفه برقراری ارتباط با سرور و ارسال و دریافت اطلاعات رو داره :

کد:
var requestObject = new XMLHttpRequest();

در قسمت بعدی هم روی داد onkeyup شی Textbox رو توسط تابع execute هندل کردیم و گفتیم که بیا یک ارتباط با سرور بر قرار کن، نحوه ی برقراری ارتباط با سرور هم که توسط تابع open شی requestObject صورت میگیره دو نوع هست

1- GET : در این نوع تو همون قسمتی که url نوشته میشه پارامتر ها هم نوشته میشه و موقع send کردن ما چیزی به سرور نمیفرستیم (null) را می فرستیم : که تو این مثال من این کارو کردم،

کد:
requestObject.open("GET",
                            "Server.php?text="+
                            document.getElementById("yourname").value,
                            true);
                            
            requestObject.send(null);

2- POST : دراین نوع شما موقع open کردن کانکشن فقط url سرور رو مشخص میکنید ولی پارامتر ها رو توسط تابع Send ارسال میکنید، برای ارسال پارامتر هم روش های مختلفی وجو داره که یکیش اینه که یک شعی از نوع FormData درست کنید و پارامتر ها رو با اون بفرستید . توجه بشه که تو این متد برنامه سرور هم باید تغییر کنه چون پارامتر ها توی شی GET_ رویخته نمیشن توی شی POST_ ریخته میشن :

کد:
requestObject.open("POST",
                            "Server2.php",
                            true);
                            
            var data = new FormData();
            data.append('text', document.getElementById("yourname").value);
            requestObject.send(data);

پارامتر آخر هم نشون میده که آیا ارتباط asynchronous (غیر هم زمان) (true) و یا synchronous (هم زمان) (false) باشه . تفاوت این دو تا هم به این شرحه اگه ما نوع ارتباط رو غیر هم زمان در نظر بگیریم که معمولا در بیشتر مواقع این گونه هست وقتی که ما داده را ارسال میکنیم سیستم منتظر یک Callback از سمت سرور میمونه و این Callback توسط تابع onreadystatechange هندل میشه و دیگه نیازی نیست که منتظر پاسخ باشیم ولی اگه هم زمان باشه باید منتظر بمونیم تا سرور پاسخ بده . یعنی این عبارت رو باید زیر تابع سند بنویسیم :

کد:
if(requestObject.readyState==4)
        {
            document.getElementById("entered").innerHTML = requestObject.responseText;
        }
این عبارت هم یعنی اینکه پیام به درستی و بدون خطا دریافت شده requestObject.readyState و میتونید اونو نمایش بدید.

این هم کد Client2.html :

کد:
<html>
<head>
<title>
    Hello Ajax!
</title>
</head>
<body>
<script language="JavaScript" type="text/JavaScript">
    var requestObject = new XMLHttpRequest();
    
    function execute()
    {
            requestObject.open("POST",
                            "Server2.php",
                            true);
                            
            var data = new FormData();
            data.append('text', document.getElementById("yourname").value);
            requestObject.send(data);        
            
        if(requestObject.readyState==4)
        {
            document.getElementById("entered").innerHTML = requestObject.responseText;
        }
    }

</script>
<form name ="form">
    Enter Your Name:
    <input id ="yourname" type="text" name="yourname" onkeyup= "execute()">
    <br/>
    <div id="entered">
        Wait For Response
    </div>
</form>
</body>
</html>

و این هم کد Server2.php :

کد:
<?PHP
    if(isset($_POST['text']))
    {
        echo strtoupper($_POST['text']);
    }
?>

امیدوارم که یاد گرفته باشی. برای کسب اطلاعات بیشتر هم از گوگل استفاده کن.
بسیار خوب ممنونم ... تا اینارو هضم کنم یه خورده زمان می بره !
لینک مرجع