PDA

View Full Version : سوال: ارسال فرم بدون ریفرش شدن صفحه؟!



numberone1
جمعه 16 تیر 1391, 21:25 عصر
چطور میتونم یه فرم بعد از پر کردن و زدن کلید سابمیت بدون اینکه صفحه ریفرش بشه یه پاپ آپ باز بشه همونجا و پیغام ثبت اطلاعات با موفقیت انجام شد نمایش داده بشه؟ ریفرش نشدن صفحه برام خیلی مهمه لطفا یه مثال برام بزنید ممنون

mohsen6500
جمعه 16 تیر 1391, 21:47 عصر
سلام دست عزیز
باید از فن آوری آجاکس استفاده کنی
مثلا این یه نمونه استفاده از آجاکس
(http://www.w3schools.com/php/php_ajax_database.asp)البته بسته به نوع کارمورد نظرت هم داره
مثلا میتونی فرم و کدهای مربوط به چک کردن فرم رو توی یک صفحه بذاری
و تعیین کنی که چه کارهایی رو مثلا رفتن به یک صفحه دیگه ویا اینکه ایجاد پاپ آپ تعیین کنید
موفق باشی

nariman_t
جمعه 16 تیر 1391, 22:11 عصر
با استفاده از ajax میتونید این کار رو انجام بدید در ضمن در کنارش از iframe هم میتونید استفاده کنید البته در صورت نیاز

numberone1
جمعه 16 تیر 1391, 22:21 عصر
این نمونه ای که گذاشتین سابمیت نداره
من میخوام فرمی که سابمیت داره اطلاعاتش پردازش و ثبت بشه و بدون اینکه ریفرش بشه صفحه پیغام ثبت با موفقیت انجام شد نمایش داده بشه
لطفا یه نمونه ساده بزارین چون من آماتور هستم
مرسی

tehro0n
شنبه 17 تیر 1391, 15:44 عصر
89346
این نمونه ای که گذاشتین سابمیت نداره
من میخوام فرمی که سابمیت داره اطلاعاتش پردازش و ثبت بشه و بدون اینکه ریفرش بشه صفحه پیغام ثبت با موفقیت انجام شد نمایش داده بشه
لطفا یه نمونه ساده بزارین چون من آماتور هستم
مرسی

یک نمونه ساده ضمیمه کردم
دکمه ثبت دقیقا همان کار submit را انجام می دهد، اگه به جای type="button" از type="submit" استفاده کنی صفحه refresh میشه و برای جلوگیری، از iframe باید استفاده کنی که اصلا درست نیست

فایل ajaxServer.php ایجاد کنید


<?php
echo 'سلام '.$_GET['name'];
?>

فایل html ایجاد کنید

<html>
<head>
<title>ToolsIR.com | AJAX Tutorial</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
function AjaxRequest() {
var xmlhttp = null;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} // else // code for IE6, IE5
return xmlhttp;
}

function ajaxAction() {
var field = document.getElementById("ajaxField").value;
var response = document.getElementById('ajaxResponse');
var xmlHttp = AjaxRequest();
xmlHttp.open("GET" , "ajaxServer.php?name=" + field, true);
xmlHttp.onreadystatechange = function() {
if(xmlHttp.readyState == 1)
response.innerHTML = "Loading...";
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
response.innerHTML = xmlHttp.responseText;
}
xmlHttp.send(null);
}
</script>
</head>
<body>
<p>
اسمت چیه: <input id="ajaxField" type="text" value="آرمان" />
<input id="ajaxButton" type="button" value="ثبت" onclick="javascript:ajaxAction();" />
</p>
<div id="ajaxResponse" style="border:1px dashed #555; margin:10px; padding:10px;"></div>
</body>
</html>

numberone1
شنبه 17 تیر 1391, 16:33 عصر
اگر من صفحه ای توش فرم هامو قرار دادم و توی صفحه ایندکس اینکلود کرده باشم باید کد های جاوا اسکریپت و توی ایندکس بزارم یا بالای فرم هام هم بزارم درست کار میکنه؟
یکی هم اینکه میشه برای یک div تا idتا 2 در نظر گرفت؟

numberone1
شنبه 17 تیر 1391, 16:54 عصر
من کد جاوا اسکریپت شما رو به این تغییر دادم ولی صفحه ریفرش میشه!!! تا کلیک میکنم روی سابمیت ریفرش میشه


<script type="text/javascript">
function AjaxRequest() {
var xmlhttp = null;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} // else // code for IE6, IE5
return xmlhttp;
}

function ajaxAction() {
var name = document.getElementById("ajaxField").value;
var location = document.getElementById("ajaxField1").value;
var response = document.getElementById('ajaxResponse');
var xmlHttp = AjaxRequest();
xmlHttp.open("GET" , "process.php?name=" + name "&location=" + location, true);
xmlHttp.onreadystatechange = function() {
if(xmlHttp.readyState == 1)
response.innerHTML = "Loading...";
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
response.innerHTML = xmlHttp.responseText;
}
xmlHttp.send(null);
}
</script>

این هم فرمم


<form method="GET" name="form">
<table width="350" cellspacing="2" cellpadding="1" border="0" style="margin-top:10px">
<tr>
<td><font color="#FFFFFF"><span style="font-size: 11px">Name:</span></font></td>
<td><input id="ajaxField" type="text" name="name" maxlength="20" value="<?php echo $RealName; ?>" class="ui-corner-all"/></td>
<label class="error" for="name" id="name_error">This field is required.</label>
</tr>
<tr>
<td><font color="#FFFFFF"><span style="font-size: 11px">Location:</span></font></td>
<td><input type="text" id="ajaxField1" name="location" maxlength="20" value="<?php echo $location; ?>" class="ui-corner-all"/></td>
<label class="error" for="location" id="location_error">This field is required.</label>
</tr>



<td><input type="submit" name="submit" class="foo" id="ajaxButton" value="Send" onclick="javascript:ajaxAction();" />
<div id="ajaxResponse" style="border:1px dashed #555; margin:10px; padding:10px;"></div>





</form>




if($_GET){

$name = $_GET['name'];
$location = $_GET['location'];
echo $name;
echo $location;

tehro0n
شنبه 17 تیر 1391, 18:19 عصر
من که گفتم اگه type = submit باشه صفحه ریفرش میشه و درست هم نیست

چون دو متغیر داری میگیری قسمت GET ایجکس رو به این صورت بنویس

xmlHttp.open("GET" , "process.php?name=" + name + "&location=" + location, true);

و دکمه submit رو هم به button تغییر بده


<input type="button" name="button" class="foo" id="ajaxButton" value="Send" onclick="javascript:ajaxAction();" />
این را امتحان کنید ببینید درست میشه

numberone1
شنبه 17 تیر 1391, 18:30 عصر
حالا ریفرش نمیشه ولی هیچ اتفاقی بعد زدن دکمه send نمی افته!!
هیچ پیغامی نمایش داده نمیشه!!
یه صفحه ایندکس اصلی دارم که یه جاش یه صفحه اینکلود کردم به اسم profile.php
توی این صفحه profile فرم هست و کد های جاوا اسکریپت
این اینکلود کردن مشکلی ایجاد نمیکنه؟؟

-------------
خوب حالا روی loading.... میمونه دیگه بعد از لودینگ هیچی نمایش نمیده!

tehro0n
شنبه 17 تیر 1391, 18:40 عصر
حالا ریفرش نمیشه ولی هیچ اتفاقی بعد زدن دکمه send نمی افته!!
هیچ پیغامی نمایش داده نمیشه!!
یه صفحه ایندکس اصلی دارم که یه جاش یه صفحه اینکلود کردم به اسم profile.php
توی این صفحه profile فرم هست و کد های جاوا اسکریپت
این اینکلود کردن مشکلی ایجاد نمیکنه؟؟

نه مسئله ای ایجاد نمی کنه، فقط شما در فایل process.php نام و مکان را می گیرید یا کد php که دادید رو همون فایل php ارسالی من انجام دادید؟!

tehro0n
شنبه 17 تیر 1391, 18:45 عصر
اگر من صفحه ای توش فرم هامو قرار دادم و توی صفحه ایندکس اینکلود کرده باشم باید کد های جاوا اسکریپت و توی ایندکس بزارم یا بالای فرم هام هم بزارم درست کار میکنه؟
یکی هم اینکه میشه برای یک div تا idتا 2 در نظر گرفت؟
در کل کدهای جاوا اسکریپت رو در قسمت header ویرایش کنید
include فقط یک میان خط است، یعنی شما تا آنجا که include زدید کدها نمایش داده میشه بعد از آن کدهای include نمایش داده میشه و بعد از آن ادامه کدهای پس از include

برای id هم خودتان می تونید اینجور سوالات رو امتحان کنید، به یک فیلد دو آی دی بدید و ببینید با جاوا یا GET کردن میشه دو آی دی رو گرفت یا نه

numberone1
شنبه 17 تیر 1391, 18:58 عصر
خوب حالا روی loading.... میمونه دیگه بعد از لودینگ هیچی نمایش نمیده!
بعد از زدن دکمه ارسال دیگه فقط همین لودینگ نمایش داده میشه و دیگه هیچ اتفاقی نمی افته!!

tehro0n
شنبه 17 تیر 1391, 19:01 عصر
<html>
<head>
<title>ToolsIR.com | AJAX Tutorial</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
function AjaxRequest() {
var xmlhttp = null;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} // else // code for IE6, IE5
return xmlhttp;
}

function ajaxAction() {
var name = document.getElementById("ajaxField").value;
var location = document.getElementById("ajaxField1").value;
var response = document.getElementById('ajaxResponse');
var xmlHttp = AjaxRequest();
xmlHttp.open("GET" , "process.php?name=" + name + "&location=" + location, true);
xmlHttp.onreadystatechange = function() {
if(xmlHttp.readyState == 1)
response.innerHTML = "Loading...";
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
response.innerHTML = xmlHttp.responseText;
}
xmlHttp.send(null);
}
</script>
</head>
<body>
<form method="GET" name="form">
<table width="350" cellspacing="2" cellpadding="1" border="0" style="margin-top:10px">
<tr>
<td><font color="#FFFFFF"><span style="font-size: 11px">Name:</span></font></td>
<td><input id="ajaxField" type="text" name="name" maxlength="20" value="" class="ui-corner-all"/></td>
<label class="error" for="name" id="name_error">This field is required.</label>
</tr>
<tr>
<td><font color="#FFFFFF"><span style="font-size: 11px">Location:</span></font></td>
<td><input type="text" id="ajaxField1" name="location" maxlength="20" value="" class="ui-corner-all"/></td>
<label class="error" for="location" id="location_error">This field is required.</label>
</tr>

<td><input type="button" name="button" class="foo" id="ajaxButton" value="Send" onclick="javascript:ajaxAction();" />
<div id="ajaxResponse" style="border:1px dashed #555; margin:10px; padding:10px;"></div>

</body>
</html>

و در فایل process.php این ها را میگذاریم

<?php
$name = $_GET['name'];
$location = $_GET['location'];
echo $name;
echo $location;
?>

numberone1
یک شنبه 18 تیر 1391, 01:35 صبح
ممنون , راهنمائیتون جواب داد
حالا میخواستم بدونم چجوری میشه خروجی رو که همون پیغام ثبت اطلاعات با موفقیت هست و توی یه پاپ آپ نمایش بدیم؟
من یه نمونه پیدا کردم از سایت jqueryui.com ولی هر جوری ربطش میدم به div response پاپ آپ یا باز نمیشه یا همون اول موقع لود صفحه باز میشه!!
اینم نمونه کد پاپ آپ

<script> $(function() { // a workaround for a flaw in the demo system (http://dev.jqueryui.com/ticket/4375), ignore! $( "#dialog:ui-dialog" ).dialog( "destroy" ); $( "#dialog-message" ).dialog({ modal: true, buttons: { Ok: function() { $( this ).dialog( "close" ); } } }); }); </script>




<div id="dialog-message" title="Download complete"> <p> <span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span> Your files have downloaded successfully into the My Downloads folder. </p> <p> Currently using <b>36% of your storage space</b>. </p> </div>

tehro0n
یک شنبه 18 تیر 1391, 01:45 صبح
اینجور کدهارو نمیشه خوند لطفا enter چیزی بزنید ارتفاع داشته باشه

فکر نکنم نیاز به جی کوئری داشته باشید و با یک alert معمولی هم کار می کنه مگه این که بخوای پنجره پیغام رو هم خودت بسازی!
شما همان کد اسکریپت قسمت دریافت اطلاعات رو به این شکل تغییر بده

if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
response.innerHTML = xmlHttp.responseText;
alert("اطلاعات شما با موفقيت ثبت شد");
}

numberone1
یک شنبه 18 تیر 1391, 01:56 صبح
میخوام حتما پنجره که باز میشه از همین ui استفاده کنه
لطفا اگه میشه یه نمونه برای ui بزارین ممنونتون میشم
اینم کدش

<script>
$(function() {
// a workaround for a flaw in the demo system (http://dev.jqueryui.com/ticket/4375), ignore!
$( "#dialog:ui-dialog" ).dialog( "destroy" );
$( "#dialog-message" ).dialog({
modal: true,
buttons: {
Ok: function() {
$( this ).dialog( "close" );
}
}
});
});

</script>






<div id="dialog-message" title="Download complete">
<p>
<span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>
Your files have downloaded successfully into the My Downloads folder.
</p>
<p>
Currently using <b>36% of your storage space</b>.
</p>

</div>

tehro0n
یک شنبه 18 تیر 1391, 10:46 صبح
خلاصه این طور نباشد که هر آن چه خواستید رو در این فروم مطرح کنید و جواب بخواهید

این اسکریپت از کجا باید بفهمه که شما پنجره با مشخصات دلخواه و دکمه کنسل و اوکی می خواهید؟
کنار این کد 4 تا اسکریپت دیگه هست که از آنجا می خونه!

وقتی چنین چیزهای ابتدایی را هم نمی دانید چرا می خواهی یک صفحه حرفه ای درست کنی؟
هر سوالی که به ذهنت اومد رو تو این فروم جواب نمی دن، برنامه نویس استخدام شما نیست!

فقط شما می تونی بری دنبال سوالات بگردی پیدا کنی، اگه ایرادات جزئی داشتی بپرسی نه اینکه براتون کد بگذاریم!

numberone1
یک شنبه 18 تیر 1391, 15:23 عصر
خلاصه این طور نباشد که هر آن چه خواستید رو در این فروم مطرح کنید و جواب بخواهید

این اسکریپت از کجا باید بفهمه که شما پنجره با مشخصات دلخواه و دکمه کنسل و اوکی می خواهید؟
کنار این کد 4 تا اسکریپت دیگه هست که از آنجا می خونه!

وقتی چنین چیزهای ابتدایی را هم نمی دانید چرا می خواهی یک صفحه حرفه ای درست کنی؟
هر سوالی که به ذهنت اومد رو تو این فروم جواب نمی دن، برنامه نویس استخدام شما نیست!

فقط شما می تونی بری دنبال سوالات بگردی پیدا کنی، اگه ایرادات جزئی داشتی بپرسی نه اینکه براتون کد بگذاریم!

استاد! گفتم که این و از سایت ui برداشتم میتونستی بری کلاسش و از اونجا دانلود کنی که نسخه کاملش و ببینی بلد نیستی خوب جواب نده مجبورت نکرده بودم که! 4تا آدم مثل شما باشن نم پس ندن باید در این فروم تخته کرد