PDA

View Full Version : سوال: يك سوال در مورد با Ajax



khazaie01
دوشنبه 31 فروردین 1388, 17:57 عصر
سلام دوستان من چند تا مقاله هم خواندم سرچ هم کردم ولی به نتیجه نرسیدم سوالم خیلی پیش پا افتاده چون مبتدی هستم :

من صفحه ای درست کردم که پسورد را برای صفحه php ميفرسته و اگر پسورد درست بود باید محتویات فایل متنی را در صفحه اول نمایش بده ...

با صفحه اول که هیچ مشکلی ندارم ... اما کد نویسی صفحه php تاجايي كه خواندم با دستور echo اين کار انجام میشه ولی وقتی این دستور را مینویسم به جای محتویات متغیر که به عنوان پارامتر بهش دادم کد HTML صفحه را میفرسته !!!

میشه راهنمایی کنید ...

mojtabadj
دوشنبه 31 فروردین 1388, 22:45 عصر
سلام دوستان من چند تا مقاله هم خواندم سرچ هم کردم ولی به نتیجه نرسیدم سوالم خیلی پیش پا افتاده چون مبتدی هستم :

من صفحه ای درست کردم که پسورد را برای صفحه php ميفرسته و اگر پسورد درست بود باید محتویات فایل متنی را در صفحه اول نمایش بده ...

با صفحه اول که هیچ مشکلی ندارم ... اما کد نویسی صفحه php تاجايي كه خواندم با دستور echo اين کار انجام میشه ولی وقتی این دستور را مینویسم به جای محتویات متغیر که به عنوان پارامتر بهش دادم کد HTML صفحه را میفرسته !!!

میشه راهنمایی کنید ...


لطف كن كدتو بذار تا ببينم مشكلش از كجاست!

امیـرحسین
دوشنبه 31 فروردین 1388, 23:06 عصر
یعنی بجای بخشی که می خواید، کل محتویات صفحه رو بصورت آژاکس دریافت میکنید؟ بیشتر توضیح بدید که منظورتون از خروجی بصورتHTML چی هست؟

khazaie01
دوشنبه 31 فروردین 1388, 23:36 عصر
چشم کد را هم میذارم ... دوستان فایل اولی که دستورات javascript داره رمز عبور را به فایل دومی که یک فایل php هست میفرسته (البته فایل php تگهای html هم داره) داخل بخش بادی فایل php فعلا نوشتم echo "salam" ولی به جای اینکه سلام به فایل اولی فرستاده بشه تمام کدهای صفحه php ارسال میشه یعنی تگهای html و body و ... به فایل اولی ارسال میشن (کل کد html فایل php)

این کدها به جای سلام ارسال میشن !!!



<html>
<head> </head>
<body>
salam
</body>
</html>

امیـرحسین
سه شنبه 01 اردیبهشت 1388, 00:30 صبح
خوب دستور echo رو ازبین کدهای HTML خارج کن. مثلا قبل از HTML قرار بده و بعدش return یا exit کن:


<?php
echo "salam";
return;
?>
<html>
<head> </head>
<body>
salam
</body>
</html>

sepehrmm
سه شنبه 01 اردیبهشت 1388, 00:45 صبح
خوب دستور echo رو ازبین کدهای HTML خارج کن. مثلا قبل از HTML قرار بده و بعدش return یا exit کن:


<?php
echo "salam";
return;
?>
<html>
<head> </head>
<body>
salam
</body>
</html>

همین طور که امیر حسین گفت شما فقط باید "سلام" رو اکو کنید
نیازی به html نیست شما کل قسمت html رو از فایل php پاک کن

khazaie01
سه شنبه 01 اردیبهشت 1388, 08:48 صبح
خیلی ممنون دوستان کدهای html را از صفحه پاک کردم درست شد ولی بازم وقتی مقدار بازگشتی سرور را با alert نشون میدم یسری تگهایی اضافه میکنه ولی وقتی داخل DIV میریزم مشکلی نداره... ممنون
یه سوال دیگه من در جاوااسکریپت برای ارسال اطلاعات این کار را کردم :



xmlHttp.open("GET","MyCodes.php/?pass="+n+"&MAction="+m);
xmlHttp.send(m);
و در صفحه php با استفاده از $_GET اطلاعات را تشخیص میدم ... این روش درسته ؟ پس این send اینجا چکارست ؟

امکان ارسال چند تا درخواست همزمان هست ؟ یعنی همزمان 2 درخواست به همین روش به سرور ارسال بشه و 2 جواب جداگانه دریافت بشه !؟

لودینگ هم براش گذاشتم البته با مخفی و نمایان کردن عکس !! روش درستی ؟

اگه جاوااسکریپت فعال نباشه ای جکس هم اجرا نمیشه . میشه تشخیص داد که جاوا اسکریپت فعال یا نه ؟
همه ی مرورگرها از XmlhttpRequest پشتیبانی میکنند ؟ این کد برای ایجاد یک نمونه از این خوبه ؟



if (window.ActiveXObject)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
else document.getElementById("MyDiv").innerHTML="مرورگر شما فاقد از فناوری ای جکس پشتیبانی نمیکند";

امیـرحسین
سه شنبه 01 اردیبهشت 1388, 10:57 صبح
xmlHttp.open("GET","MyCodes.php/?pass="+n+"&MAction="+m);
xmlHttp.send(m);
و در صفحه php با استفاده از $_GET اطلاعات را تشخیص میدم ... این روش درسته ؟ پس این send اینجا چکارست ؟
send برای ارسال اطلاعات (data) هست. روش GET چیزی ارسال نمی کنه پس باید اینجوری باشه: (send(null . روش POST اطلاعات ارسال می کنه.
(کوئری که با URL اضافه می کنید، ارسال دیتا نیست یعنی چه در POST و چه در GET، کوئری که به URL اضافه میشه همیشه بصورت GET_$ هست.




امکان ارسال چند تا درخواست همزمان هست ؟ یعنی همزمان 2 درخواست به همین روش به سرور ارسال بشه و 2 جواب جداگانه دریافت بشه !؟
بله. باید به ازای هر درخواست، یک شی آژاکس (XMLHttpRequst) جدید ایجاد کنید: نمونه (http://barnamenevis.org/forum/showpost.php?p=707633&postcount=4)


لودینگ هم براش گذاشتم البته با مخفی و نمایان کردن عکس !! روش درستی ؟همین ساده ترین روشه!




همه ی مرورگرها از XmlhttpRequest پشتیبانی میکنند ؟ این کد برای ایجاد یک نمونه از این خوبه؟



if (window.ActiveXObject)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
else document.getElementById("MyDiv").innerHTML="مرورگر شما فاقد از فناوری ای جکس پشتیبانی نمیکند";

اینترنت اکسپلورر قبل از 7 (فکر کنم و خود 7) این شی رو پشتیبانی نمی کنند.
من خودم همیشه برای ایجاد درخواست از کد زیر استفاده می کنم:

function ajaxRequest(){
try
{
var xmlhttp = new XMLHttpRequest();
}
catch(err1)
{
var ieXmlHttpVersions = new Array();
ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.7.0";
ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.6.0";
ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.5.0";
ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.4.0";
ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.3.0";
ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp";
ieXmlHttpVersions[ieXmlHttpVersions.length] = "Microsoft.XMLHttp";

var i;
for (i=0; i < ieXmlHttpVersions.length; i++)
{
try
{
var xmlhttp = new ActiveXObject(ieXmlHttpVersions[i]);
break;
}
catch (err2)
{
return false;
}
}
}

return xmlhttp;
}

khazaie01
سه شنبه 01 اردیبهشت 1388, 11:09 صبح
خیلی خیلی ممنون . خوب اطلاعاتی که با send ارسال میشن را باید چجوری در php تشخیص داد ؟

اعظم
سه شنبه 01 اردیبهشت 1388, 12:27 عصر
اگر از روش get فرستادی با $_GET

و اگر با post بوده هم با $_Post

khazaie01
سه شنبه 01 اردیبهشت 1388, 12:44 عصر
اینو میدونم با get وقتی میفرستم عملا متد send استفاد ای نداره .پس اگه با post بفرستم باید مقدار داده را با send بفرستم ؟

اعظم
سه شنبه 01 اردیبهشت 1388, 13:01 عصر
var HttpConn = MakeConnection();
if (Proccess_Type=='get')
{
HttpConn.open(Proccess_Type, Page_Address+'?'+Page_Address_Query,SynType);
}
else
{
HttpConn.open(Proccess_Type, Page_Address,SynType);
}
HttpConn.onreadystatechange = function ()
{

if ((HttpConn.readyState == 4)&&(HttpConn.status == 200))
{
. . .
}
};

if (Proccess_Type=='get')
{
HttpConn.send(null);
}
else
{
HttpConn.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
HttpConn.send(Page_Address_Query);
}

khazaie01
سه شنبه 01 اردیبهشت 1388, 20:04 عصر
خیلی ممنون . خوب فقط این خط را متوجه نشدم میشه توضیح بدید این خط چکار میکنه ؟ :






HttpConn.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");



چرا send را تو همون شرط اولی نذاشتید و یه شرط دیگه نوشتید ؟!!

اعظم
چهارشنبه 02 اردیبهشت 1388, 09:12 صبح
برای ارسال اطلاعات از طریق متد post حتما نیاز داریم اطلاعات در یک فرم قرار بگیرند در واقع دستور بالا این کار رو انجام میده و نوع فرم رو مشخص میکنه .

khazaie01
چهارشنبه 02 اردیبهشت 1388, 15:39 عصر
ممنون ولی میشه یکم بیشتر توضیح بدید ؟ پارامترهای ورودیش چی هستن ؟

ممنون که جواب میدین

امیـرحسین
چهارشنبه 02 اردیبهشت 1388, 19:26 عصر
ارسال GET در واقع ارسال data نیست. شما دارید یک URL رو با تعدادی Query درخواست می کنید ولی روش POST اطلاعات رو بصورت اطلاعات یک فرم، کد می کنه و ارسال می کنه و مثلا امنیت هم داره!

khazaie01
چهارشنبه 02 اردیبهشت 1388, 21:27 عصر
ممنون . این پارامترهاش چی هست ؟ میشه یه مثال عملی بزنید ؟

اعظم
پنج شنبه 03 اردیبهشت 1388, 10:06 صبح
پارامترهای کدوم دستور ؟

اگر منظورت Page_Address_Query
به شکل زیر
فرض کن 2 تا فیلد داری یکی name که یک input ساده است و دیگری description که یک textarea

Page_Address_Query="field1=value1&field2=value2"


یعنی :



var Page_Address_Query;
Page_Address_Query="name="+document.getElementById('name')
Page_Address_Query+="&"
Page_Address_Query+="description="+document.getElementById('escription')

khazaie01
پنج شنبه 03 اردیبهشت 1388, 10:29 صبح
نه پارامتهای دستور میگم
setRequestHeader

امیـرحسین
پنج شنبه 03 اردیبهشت 1388, 12:03 عصر
این اطلاعات کاملی داره: W3 : XMLHttpRequest (http://www.w3.org/TR/XMLHttpRequest)

و توی این صفحه متدهایی که میخواید درباره اشون بیشتر بدونید رو پیدا کنید مثل open، setRequestHeader و غیر: http://msdn.microsoft.com/en-us/library/ms533053(VS.85).aspx

غیر از اینها سرچ کنید: XMLHttpRequest تا درباره متدها و پارامترها و prrperty های این آبجکت اطلاعات کسب کنید.