مشکل در ارسال اطلاعات فرم به کمک کلاس ajax مطرح شده توسط ziXet عزیز.

keykan

New Member
سلام به دوستان عزیز،

بنده مشکلی در زمینه کلاس مطرح شده در اینجا دارم.

بنده فرمی رو به شکل زیر در صفحه index.php خودم دارم :

کد:
<html>
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Ajax test</title>
	<script type="text/javascript" src="ajax.js"></script>
	<script language="javascript">

	var get = function() {
		var ajax = new Ajax();
		ajax.setvals('editor', 'loading', "<img src='a-loading.gif' />", 'action.php', document.forms[MainForm]);
		ajax.post();
	}

	</script>
	</head>

	<body>

		<form name="MainForm" action="">
			<div id="loading"></div>
			<input type="button" value="send" onclick="get()" />
			<input id="editor" type="text" name="editor" />
		</form>

	</body>
</html>

که همانطور که میبینید، می خوام اطلاعات داخل المنت با آی دی editor رو به صفحه action.php ارسال کنم و در اونجا این اطلاعات رو در دیتابیس بریزم. منتها مشکلم اینه که نمیدونم چرا این عمل انجام نمیشه !

صفحه action.php من به شکل زیر هست :

کد:
<?php 
require_once 'DB.php';

?>

<?php

$q=1;
$content=$_POST["editor"];	
mysql_query("update tbl_page set page_content = '$content' where id =".$q);
?>

البته تا جایی که خودم تلاش کردم مشکلم و حل کنم، فهمیدم در صفحه action.php

کد:
$content=$_POST["editor"];

شناخته نمیشه. و پیام زیر نشون داده میشه :
Notice: Undefined index: editor in C:\wamp\www\Action.php on line 9

اما تا جایی که فهمیدم، کلاس ajax که ziXet عزیز مطرح کردن و توسط دوستان کامل شد، اطلاعات فرم رو میگرفت و به صفحه مقصد میفرستاد. اما اینجا چرا این عمل رو انجام نمیده؟؟


من کاربر تازه کار php و ajax هستم. ممنون میشم راهنماییم کنید.
 
آخرین ویرایش:

eAmin

Well-Known Member
پارامتر اول یعنی editor رو باید برابر شناسه ای قرار بدید که میخواید اطلاعات در اونجا ظاهر بشن، مثلا یک div با شناسه content.
یک خطای سینتکس هم مشاهده شد، شما باید MainForm رو در بین "" قرار می دادید، یا مثل همون کدی که قرار تاپیک مربوطه قرار دادم، مانند آرایه اولین فرم صفحه رو پیدا می کردید.
کد اصلاح شده:
کد:
var get = function() {
    var ajax = new Ajax();
    ajax.setvals('content', 'loading', "<img src='a-loading.gif' />", 'action.php', document.forms["MainForm"]);
    ajax.post();
}
دلیلی که انجام نمیداد ( اطلاعات ارسال نمیشد ) رو هم بالا بهتون توضیح دادم قسمت MainForm.

موفق باشید.
 

keykan

New Member
پارامتر اول یعنی editor رو باید برابر شناسه ای قرار بدید که میخواید اطلاعات در اونجا ظاهر بشن، مثلا یک div با شناسه content.
یک خطای سینتکس هم مشاهده شد، شما باید MainForm رو در بین "" قرار می دادید، یا مثل همون کدی که قرار تاپیک مربوطه قرار دادم، مانند آرایه اولین فرم صفحه رو پیدا می کردید.
کد اصلاح شده:
کد:
var get = function() {
    var ajax = new Ajax();
    ajax.setvals('content', 'loading', "<img src='a-loading.gif' />", 'action.php', document.forms["MainForm"]);
    ajax.post();
}
دلیلی که انجام نمیداد ( اطلاعات ارسال نمیشد ) رو هم بالا بهتون توضیح دادم قسمت MainForm.

موفق باشید.

ممنونم از راهنمایی تون eAmin عزیز.

هر دو تغییری که فرمودید رو لحاظ کردم. هم با قرار دادن MainForm در "" و هم به شکل آرایه ای. اما متأسفانه باز هم همون پیام قبل، مبنی بر تعریف نشده بودن editor در صفحه action.php میاد. نمیدونم دلیلش چی هست؟ واقعا گیجم کرده!

ممنون میشم راهنمایی بیشتر بفرمایید.

با تشکر.
 
آخرین ویرایش:

eAmin

Well-Known Member
خواهش مکینم.
شما این نمونه رو دانلود کنید، و در کارهاتون از کتابخوانه قرار داده شده در همین فایل استفاده کنید، چون کدهای تاپیک مربوطه بعلت دلایل نامعلومی تغییر کردند!
انشاالله با اینها مشکلتون حل میشه.

موفق باشید.
 

پیوست ها

  • ajaxtest.rar
    1.9 کیلوبایت · بازدیدها: 14

keykan

New Member
با سلام،

یک دنیا سپاسگزارم eAmin عزیز.

امیدوارم بتونم این لطفتون رو جبران کنم یک روز... .

فقط تنها مشکل دیگه که باقی مونده این هست که من در پروژه خودم از ادیتور elrte استفاده می کنم. (بنا به نیازهایی که پروژه ام داشت، این ادیتور رو انتخاب کردم.)

واسه اینکه محتوایی رو از جای دیگه (مثلا database) داخل اون قرار بدم، خود این ادیتور دستوری داره به شکل زیر :

کد:
var html_code = '<p>This is example <strong>HTML</strong> code.</p>';
$('selector').elrte('val', html_code);

که بنده با توجه به کلاس ajax این انجمن و دستور بالا، متد finish رو به شکل زیر بازنویسی کردم :

کد:
	this.finish = function(){
		this.getElement(this.LoadingTarget).innerHTML='';
		this.getElement(this.MainTarget).innerHTML=this.xmlObject.responseText;
			this.html_code = this.xmlObject.responseText;
			$('#editor').elrte('val', this.html_code);
	}

منتها مشکل یا به عبارت دیگه سوال بنده این هست که این بروز رسانی متد finish فقط در دو مرورگر opera و firefox کار میکنه و در مرورگرهای IE ، Safari ، Chrome کار نمیکنه و فقط نیم میلی ثانیه لودینگ رو نمایش میده و محنوا رو داخل ادیتورم قرار نمیده.

ممنون میشم اگر در این زمینه هم بنده رو راهنمایی بفرمایید.

با تشکر.
 
آخرین ویرایش:

keykan

New Member
با سلام خدمت همه دوستان عزیزم،

مشکلی که در پست بالا عنوان کردم، خدا رو شکر به لطف خودش تونستم حل کنم. به همین خاطر گفتم بد نیست اینجا هم مطرح کنم شاید روزی به درد کسی خورد. (عذرخواهی از مدیر انجمن اگر این پستم زیاد به ajax مرتبط نیست.)

مشکل بنده در اینجا بود که من فرمی رو به شکل زیر در نظر گرفته بودم و اطلاعاتم رو در input با آی دی editor که محیطی از جنس ادیتور elrte داشت لود میکردم.

کد:
<form name="MainForm" action="" >
	<div id="loading"></div>
	<input type="button" id="btn_submit" onclick="get()"/>
	<input id="editor" type="text" name="editor" />	
</form>

که با اعمال تغییر زیر در فرم بالا، مشکلم حل شد... .

کد:
<form name="MainForm" action="" >
	<div id="loading"></div>
	<input type="button" id="btn_submit" onclick="get()"/>
	<div id="editor" type="text" name="editor" >	
		<div id="ajaxtest"></div>	
	</div>
</form>

حالا اطلاعاتم رو در دایو با آی دی ajaxtest لود میکنم.

باز هم از دوست عزیزم eAmin عزیز ممنونم که بنده رو کمک کردن و به سوال هام پاخ دادند.

شاد، پیروز و سربلند باشید... .
 

eAmin

Well-Known Member
خب خدا رو شکر که مشکلتون حل شد.
ولی یک پیشنهاد دارم برای بهینه تر شدن پروژه یا وبسایتتون. شما که به هرحال کتابخوانه ی jQuery رو لود می کنید، خب بجای استفاده از کلاس Ajax جناب ziXet از همون jQuery برای فرستادن درخواستها و اطلاعات استفاده کنید، اینطوری حجم کدها و پروژه کاهش پیدا میکنه.
نظر بنده این هست که وقتی داریم از یک کتابخوانه استفاده میکنیم، چرا بیایم و دوباره از یک کتابخوانه ی دیگه استفاده کنیم درصورتی که میشه همون کار رو با کتابخوانه ی اولی انجام داد؟

این آدرس رو مشاهده کنید برای یادگیری استفاده از Ajax در jQuery.
معادل چیزی که شما می خواید با jQuery همچین چیزی میشه:
کد:
  $.ajax({
    type: "POST",
    url: "aj.php",
    data: $('form[name="MainForm"]').serialize(),
    success: function(response){
        $('#content').html(response);
        var html_code = '<p>This is example <strong>HTML</strong> code.</p>';
        $('selector').elrte('val', html_code);
    }
});
حالا با کمی بالا و پایین می تونید اون چیزی که مدنظرتون هست رو پیاده سازی کنید.
می بینید، اینطوری هم راحت تر هستید و هم کدهای قابل درک بهتری رو مینویسید. اون کلاس ای جکسی که ارائه شده، یک کلاس Alternative هست و برای مواقعی که دسترسی به کتابخوانه های دیگه نداریم و یا کمی هم بخاطر حجم بالاشون استفاده کنیم، مورد استفاده قرار میگیره.

موفق باشید.
 

جدیدترین ارسال ها

بالا