PDA

View Full Version : سوال: پردازش و پاسخ به php و اژاکس



reza1988
چهارشنبه 02 بهمن 1387, 15:36 عصر
با سلام
دوستان یک سری کد را من از یک مقاله کپی کردم و هر کاری که در آن مقاله گفته شده بود انجام دادم ولی اجرا نشد .
من می خوام یک فرم با دو لیست باکس یا همون لیست های پایین افتادنی درست کنم ، که اگر یک option یا گزینه را از منوی اول انتخاب کردیم ، گزینه های منوی دوم بر اساس منوی اول ظاهر بشوند . مثال آن مقاله هم این طور بود که دو تا منو داشته باشیم که اگر از منوی اول نام یک کشور انتخاب شد در منوی یا لیست باکس دوم اسم شهرهای مربوط به آن کشور ظاهر شود .
در این سایت سه نوع کد بود که در زیر آن ها را گذاشته ام .

کد زیر برای فعال سازی ارتباط کلاینت به سرور است .در این کد دو تابع برای فعال سازی آژاکس آمده باید آن را با نام و پسوند ajax.js ذخیره کرد .



function DoCallback(data) {
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
req=new XMLHttpRequest();
req.onreadystatechange=processReqChange;
req.open('POST',url,true);
req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
req.send(data);
//branch for IE/windows ActiveX version
}
else if (window.ActiveXObject) {
req = new ActiveXObject ('microsoft.XMLHTTP');
if (req) {
req.onreadystatechange=processReqChange;
req.open('POST',url,true);
req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
req.send(data);
}
}
}
function processReqChange() {
// only if req show 'loaded'
if (req.readyState == 4) {
//only if 'OK'
if (req.status == 200) {
eval (what);
}
else {
alert ('There was a problem retrieving the XML data: ' + req.responseText);
}
}
}



حال کد php زیر را که قرار است آژاکس با آن ارتباط برقرار کند ، را که در زیر آمده با نام و پسوندcountry.php تایپ و ذخیره می کنیم .



<?php
$states = array();
$states ["iran"] = array("tehran","esfehan","mashhad");
$states ["USA"] = array ("california","new yourk","ohio");
if (isset ($_POST["country"]) && isset ($states[$_POST["country"]]))
{
foreach($states[$_POST["country"]] as $state) {
printf("%s",$state);
}
}
?>



همچنین فایلی که لیست ها ما در ان قرار دارد نیز در زیر آمده آن را با نام و پسوند country.html باید ذخیره کنیم .



<html>
<head>
<script>
var url = "country.php";
var what = "SetStates(req.responseText)";
function GetStates(Country) {
DoCallback("country=" + Country);
}
function SetStates(States) {
var stateBox = document.getElementById("state");
stateBox.options.length=0;
if (States != "") {
var arrStates = States.split(",");
for (i=0 ; i<arrStates.length ;i++) {
if(arrStates[i] !="") {
stateBox.options[stateBox.options.length] =new option(arrStates[i] , arrStates[i]);
}
}
}
}
</script>
<script src="ajax.js" type="text/javascript"></script>
</head>
<body>
<pre>Country:
<select onchange="GetStates(this.options[this.selectedIndex].text)" id="country">
<option value=""></option>
<option>iran</option>
<option>USA</option>
</select><br>State: <select id="state"></select>
</pre>
</body>
</html>

حال در صفحه HTML ایجاد شده باید دو منو داشته باشیم که اگر در منوی اول نام یک کشور انتخاب شود در منوی دو باید نام آن شهر ها نمایش داده شود .


چون که این سوال علاوه بر آژاکس به PHP هم مر بوط بود سوال را در این قسمت پرسیدم ، امیدوارم که مکان طرح سوال را اشتباه نکرده باشم . همچنین امیدوارم عنوانم نیز مناسب باشد ، اگه عنوان غلط بود شما ببخشید.
دوستان، من به کدی مانند آن چه گفته شد ، نیاز شدید دارم . هر چی هم سرچ کردم چیزی که که این نیاز را بر طرف کنه پیدا نکردم . فقط در یک مقاله این کد ها را پیدا کردم که آن نیز کار نکرد . لطفا در بر طرف کردن ایراد این کد کمکم کنید ، یا کد دیگر که همین کار را بکنه ارائه کنید .:ناراحت:
با تشکر

اعظم
چهارشنبه 02 بهمن 1387, 16:28 عصر
شما در فایل پی اچ پی نام کشورها و شهرها رو داخل یک آرایه قرار دادین . من فکر می کنم شما کل اینکار رو با جاوا اسکریپت می تونستی پیاده سازی کنی و نیازی به ترکیب پی اچ پی و آجاکس نبود مگر اینکه ارتباط با پایگاه داده مطرح بود .
نمونه های پیاده سازی شده با جاوا اسکریپت رو هم با کمی سرچ می تونی پیدا کنی.

اعظم
چهارشنبه 02 بهمن 1387, 16:34 عصر
if(arrStates[i] !="") {
stateBox.options[stateBox.options.length] =new option(arrStates[i] , arrStates[i]);
}

من فکر می کنم مشکلت باید از این خط باشه !
stateBox کجاست ؟

اعظم
چهارشنبه 02 بهمن 1387, 16:43 عصر
eval (what);


به جای کد بالا هم باید احتمالا این باشه



eval ('SetStates(\''+req.responseText+'\')');

reza1988
پنج شنبه 03 بهمن 1387, 16:34 عصر
ضمن تشکر از شما به خاط پاسخ ها یتان
اما من کارهای گفته شده را انجام دادم ، اما باز هم لیست باکس ها کار نکردند.



شما در فایل پی اچ پی نام کشورها و شهرها رو داخل یک آرایه قرار دادین . من فکر می کنم شما کل اینکار رو با جاوا اسکریپت می تونستی پیاده سازی کنی و نیازی به ترکیب پی اچ پی و آجاکس نبود مگر اینکه ارتباط با پایگاه داده مطرح بود .
نمونه های پیاده سازی شده با جاوا اسکریپت رو هم با کمی سرچ می تونی پیدا کنی.


ما که هر چی سرچ کردیم چیزی پیدا نکردیم.
لیست باکس اول هیچ ارتباطی با پایگاه داده ندارد و فقط باعث نمایش گزینه های لیست باکس دوم می شود .
اما با انتخاب یکی از گزینه های لیست باکس دوم ، مقدار آن گزینه یا option ،به همراه سایر داده های فرم برای یک اسکریپت PHP ارسال می شود .
حال اگر این فرایند را با جاوا اسکریپت می شود انجام داد ، خواهشمندم کد آن را بگذارید یااگر جایی را می شناسید که کد این موضوع را توضیح داده ،خواهشمندم لینک آن را بگذارید .
با تشکر

اعظم
پنج شنبه 03 بهمن 1387, 17:54 عصر
من قبلا کدش رو گرفتم اگر ایمیلت رو بدی برات ارسال می کنم
یک نگاهی هم به این بنداز:
http://www.microcosmotalk.com/tech/scripts/

reza1988
دوشنبه 14 بهمن 1387, 16:56 عصر
با سلام
از کدی که برایم ایمیل کردید بسار ممنونم .ازش استفاده کردم خیلی بدردم خورد .
واقعا ممنون.
حالا من از کدی که شما برایم ایمیل کردید دو جا استفاده می کنم ، یک جا در صفحه HTML که در این جا مشکلی نیست .
اما یک جا هم از این منوها می خوام در یک صفحه PHP استفاده کنم . اما هر کاری کردم کار نکرد . چی کار کنم ؟:متفکر:
البته خیلی سرچ کردم در این سایت ولی چیزی گیرم نیومد. یعنی تا اونجا که فهمیدم انگار نمیشه از جاوا اسکریپت در فایل php استفاده کرد .
ممنون میشم اگه بازم کمکم کنید و بگید چه کنم .