سلام
من یه اسکریپ نیاز داشتم که وقتی روی یک دکمه وایمیسته چند ثانیه بعد به صورت ای جاکسی منو بالا بیاد
Printable View
سلام
من یه اسکریپ نیاز داشتم که وقتی روی یک دکمه وایمیسته چند ثانیه بعد به صورت ای جاکسی منو بالا بیاد
سلام.نقل قول:
حالا چه اصراری داری ای جکسی باشه؟
به نظر من واسه اینجور چیزها استفاده از ای جکس یه خرده غیر منطقیه!
با کلاسه دیگه
کلاس، ملاس رو ول لش!!!!نقل قول:
نظر من همونیه که گفتم پیاده سازیه منو اونم با ای جکس، یه خرده غیر منطقیه، حتی از ارزشهای سایتت هم کم می کنه!!!!
وا پس با جاوا؟
پس با چی؟!؟!؟!نقل قول:
خود ای جکس هم بدون جاوااسکریپت هیچه!!!، ولی استفاده از جاوااسکریپت بدون دخالت ای جکس، پیشنهاد می شه...
وا پس با جاوا؟
ببخشید قصد جسارت یا توهین ندارم، ولی یه خرده دارین زیاده روی می کنین.نقل قول:
دوتا شد بابا اه ندیدم
همش تخصیر اینترنتمه دیگه
asp.net فرقش با اجاکس چیه برای طراح وب خوب شدن چه کار کنم
سلام.نقل قول:
جستجو کنید عزیز من!
این دوتا کی با هم فرق دارن، ASP.NET یک زبان سمت سرور هست ولی Ajax نه سمت کاربره یعنی رابط بین کاربر و سرور هست.
با جستجو می تونید به جواب سوالهاتون برسید.
محتواي پست حذف شد!!
ببخشيد دوستان حواسم نبود پست نامرتبط دادم. پاكش كردم.
این کد اشتباه هست ...نقل قول:
این کد درسته :
form رو نبستید :
کد:<html>
<Body>
<script type="text/javascript" language="JavaScript">
function Ajax() {
var XHR = new ActiveXObject("Msxml2.XMLHTTP") ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
XHR.onreadystatechange = function() {
if(XHR.readystate == 4)
{
document.FormX.time.value = XHR.ResponseText;
}
}
XHR.open("GET", "time.asp", true);
XHR.send(null);
}
</script>
<form name="FormX">
Name: <input type="text" onchange="Ajax();">
Time: <input type="text" name="time">
</form>
</Body>
</html>
سلام
من یک کد با آژاکس نوشتم که با IE کار میکنه ولی با Firefox کار نمیکنه ! میدونید چرا؟؟:2:
مشکل بیشتر مربوط به فراخوانی توابع است من خودم قبلا خیلی کم خواستم باهاش کار کنم ولی چون اطلاعاتم خیلی کم بود ( جاوا اسکریپت و html و php ) تا طلاع ثانویه تعطیلش کردم !نقل قول:
من یک کد با آژاکس نوشتم که با IE کار میکنه ولی با Firefox کار نمیکنه ! میدونید چرا؟؟
ولی در اون زمان من هم چنین مشکلاتی داشتم یعنی نمی تونستم یک کدی رو در سه تا مرورگر به صورت صحیح اجرا کنم !
نکته آخری که می تونم بکم این است که اگر می خواهید صفحه ای رو تنظیم کنید بعد از هر تغییری در سورس برنامه با تمام مرورگرها چکش کنید بعد ادامه بدید ! اینجوری اگر مشکلی هم پیش بیاد در همان لحظه متوجه می شد!
سلام خسته نباشید
یک سوال درباره ajax در asp.net داشتم
میخوام یک عملی که توی سرور انجام شد ،وقتی تموم شد یه پیغام جاوااسکریپتی alert نشون کاربر بدم
مثلا یک textbox که با یک دکمه در database ذخیره میشه میخوام وقتی ذخیره شد یک پیغام مناسب به صورت alert به کاربر نشون بدم
با ScriptManager.RegisterStartupScript سعی کردم یه کارایی بکنم. پیغامم نشون میده ولی عملکرد صفحه بعد از پیغام دچار مشکل میشه
با php این کار خیلی راحته ولی نمیدونم چرا برا .net پیشبینی نشده
سلام دوست عزیز ، مشکل از فراخوانی تابع است برای رفع این مشکل تابع های خود را به این صورت فراخوانی کن. { مشکلت حتماً رفع می شه }نقل قول:
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject('Msxml2.XMLHTTP'); // Sakht Motagheiere Lazeme Baraye Ajax
} catch (e) {
try {
xmlhttp = new
ActiveXObject('Microsoft.XMLHTTP'); // Dar Sorat Support Nakardan Motagheier Bala // Sakht Motagheiere Lazeme Baraye Ajax
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
نمونه دیگر :
آموزش Ajax بصورت کاربردی در PHP همراه با MySQL
کد:http://www.forum.p30world.com/showthread.php?t=288809
من تازه این آموزشو دانلو د کردم خواستم تشکر کنم
سلام.
3 تا سوال آجاکسی دارم که به ترتیب پدر من رو در آوردن »
* سوال 1- همونطور که می دونید، تو FireFox (عزیز) ، یه متد اضافی تو XMLHttpRequest هست به نام sendAsBinary که میشه باهاش هر 256 کاراکتر رو بدون محدودیت فرستاد. (مثلاً محتوای یه تصویر رو)
ولی تو IE ,و غیره اصلاً همچین چیزی وجود نداره!!!!!!!!!!!!!!!!!!!!!
خب پس من چجوری می تونم با IE محتوای Binary (دو دویی) بفرستم؟؟!؟!؟!
البته منظورم این نیست که به صورت a=b&c=d کنمش که با یه encodeURIComponent همه چیز حل باشه.
مثلاً می خوام به صورت multipart بفرستمش (یه سرچ بکنید، می فهمید multipart چه شکلیه)
خودم کلی راه رو امتحان کردم.
یکی اش این بود که :
رو به محتوام اضافه کنم و محتوام رو ------ کنم و نتیجه این بود که سرور به صورت کاملاً ------ میگیره اش (=اتوماتیک تبدیلش نمی کنه[فرض رو بر این بگیرید که امکان decode کردنش برام وجود نداشته باشه])کد:Content-Transfer-Encoding: ------
و یه چیز دیگه که تو همه جا نوشتن اینه که escape ش کنم که باز هم Server خود به خود unescapeش نمی کنه!
و...
* سوال 2 - فرض کنید من یه متغیر با نام xhr دارم که توش آجاکس رو دارم.
حالا اگر بخوام تو رویداد onreadystatechange حذفش کنم باید چه کنم؟
وکد:del xhr;
رو امتحان کردم ولی نشد!کد:xhr = null;
میگه الان نمی تونی حذفش کنی.
می خوام حذفش کنم که بار صفحه کم بشه. (فرض رو بر این بگیرید که 1000 بار تابع XMLHttpRequest رو new کرده باشم و تو 1000 تا متغیر گذاشته باشمش.)
* سوال 3- (فرض رو همون 1000 تای بالا بذارید) من تو رویداد onreadystatechange چجوری می تونم شیء XMLHttpRequest م رو داشته باشم؟
تو فایر (عزیز) اینجوری میشه:
که هر دوتاش همون xhr خودمه.کد:xhr.onreadystatechange = function(ev){
alert(ev);
alert(this);
}
ولی تو IE (لعنت الله علیه! [شوخی بود. بهتون بر نخوره!]) ev وجود نخواهد داشت و this هم بهم شیء Windowم رو میده.
در ضمن window.event و this.event هم null ه!!!
این شما و این 3 سوال من. امیدوارم قبل از سال جدید بهم جواب بدید.
مرسی.
سلام.نقل قول:
همونطور که می دونید، تو FireFox (عزیز) ، یه متد اضافی تو XMLHttpRequest هست به نام sendAsBinary که میشه باهاش هر 256 کاراکتر رو بدون محدودیت فرستاد. (مثلاً محتوای یه تصویر رو)
ولی تو IE ,و غیره اصلاً همچین چیزی وجود نداره!!!!!!!!!!!!!!!!!!!!!
ببین واقعیت اینه که sendAsBinary استاندارد نیست! و از طرف W3C تایید نشده. دلیل اینکه در مرورگری همچون فایرفاکس این متد اضافه شده اینه که، به developer های اکستنشهاش این امکان رو بده تا بتونن به این صورت اطلاعات رو بفرستن.
البته کار نشد نداره! ولی یه خرده محدود باشه، با کمی جستجو دیدم که تا حدودی می شه اینکار رو کرد. طبق استاندارد RFC نمی دونم شماره چندمش:31: هر فایلی که به سرور فرستاده می شه، یک boundary داره که سرور به این طریق می تونه فایلها رو دریافت کنه. البته بنده از مهندس بهروز راد این رو مطلع شدم. هنوز موفق به استفاده از این روش نشدم، فعلا دارم روش کار می کنم ببینم، چطوریاست! یه همچین شکلی داره:
راستی، این صفحه رو یه نگاه بنداز. البته این می خونه و نمی فرسته!کد:-----------------------------1654974419512
Content-Disposition: form-data; name="upFile"; filename="amazon phone number.txt"
Content-Type: text/plain
[file content here - perfectly reproduced (if I remove the surrounding junk)]
-----------------------------1654974419512--
کد:http://nagoon97.wordpress.com/2008/04/06/reading-binary-files-using-ajax/
نمی دونم اینو می خوای چیکار؟ آخه متدی که خودش وابسته به اون شی هست، چطور انتظار داری اینکار رو برات بکنه؟نقل قول:
فرض کنید من یه متغیر با نام xhr دارم که توش آجاکس رو دارم.
حالا اگر بخوام تو رویداد onreadystatechange حذفش کنم باید چه کنم؟
به هر حال فکر می کنم اینا جواب بدن:
اگر جواب نداد، دوباره همونو new کن بریز تو متغیر xhr اینکار باعث می شه، یه شی دیگه ساخته بشه و متدهای قبلیش که مورد استفاده بوده، دیگه از کار می یافتن.کد:xhr = function(){};
یه چیزی اول بهم بگو، تو این متغیر xhr رو سراسری تعریف می کنی؟ اگه اینطوریه پس خسته نباشی!:31:نقل قول:
(فرض رو همون 1000 تای بالا بذارید) من تو رویداد onreadystatechange چجوری می تونم شیء XMLHttpRequest م رو داشته باشم؟
به نظرم فکر نمی کنم راهی باشه، باید به همون صورت قبل استفاده کنی و this رو بیخیال شی!
راستی قبل سال بود آره؟:31:
اولاً : مرسی که جواب دادی
من دقیقاً از این روش استفاده کردم ولی شما با این روش باز هم می تونی ASCII های کوچکتر از 128 رو بفرستی (عدد و انگلیسی و...)کد:-----------------------------1654974419512
Content-Disposition: form-data; name="upFile"; filename="amazon phone number.txt"
Content-Type: text/plain
[file content here - perfectly reproduced (if I remove the surrounding junk)]
-----------------------------1654974419512--
اگر با این روش بخوای یه عکس رو بفرستی، سرور به چیز بی معنی دریافت می کنه!
---
اون 2 تای دیگه رو هم اینجوری می گم:
فرض کن من این رو دارم:
برای onreadystatechange همشون هم یک تابع تعریف کردم.کد:window.xhr1 = new XmlHttpRequest();
window.xhr2 = new XmlHttpRequest();
window.xhr3 = new XmlHttpRequest();
window.xhr4 = new XmlHttpRequest();
window.xhr5 = new XmlHttpRequest();
window.xhr6 = new XmlHttpRequest();
window.xhr7 = new XmlHttpRequest();
window.xhr8 = new XmlHttpRequest();
...
...
window.xhr1000 = new XmlHttpRequest();
یعنی:
OK؟کد:window.xhr1.onreadystatechange = myFunction;
window.xhr2.onreadystatechange = myFunction;
window.xhr3.onreadystatechange = myFunction;
window.xhr4.onreadystatechange = myFunction;
window.xhr5.onreadystatechange = myFunction;
window.xhr6.onreadystatechange = myFunction;
window.xhr7.onreadystatechange = myFunction;
window.xhr8.onreadystatechange = myFunction;
...
...
window.xhr1000.onreadystatechange = myFunction;
حالا تو myFunction م باید responseText کدوم رو بخونم؟
نکته اینجاست.
مثلاً اگر درخواست از طرف آقای xhr4 باشه، تو FF میشه با this شیء ش رو در دست داشت ولی تو IE؟؟؟
اون قضیه ی Delete کردن هم فقط برای کم کردن بار صفحه بود.
در کل می خوام مثلاً یک xhrم رو reset کنم یعنی responseTextش خالی بشه و...
آهان موضوع از این قراره که شما می خوای، از یه تابع برای تمامی شی های ساخته شده استفاده کنی... الان موضوع رو بهتر متوجه شدم.
Okayyy!:31:
من هم با استفاده this سعی کردم اینکار رو بکنم ولی نشد، این IE عجب خنگیه! شی رو می شناسه ولی وقتی می خوای از متدهاش استفاده کنی، هیچی دیگه می شه کشک.
تنها راهی که به نظر من می رسه اینه که برای تابع مریوطه یه آرگومان در نظر بگیری، و موقع صدا زدن اون آرگومان رو با شی های مورد مقدار دهی کنید:
برای Delete هم به همون روشی که گفتم کفایت می کنه:کد:var myFunction = function(arg) {
if (arg.readyState == 4) return arg.resopnseText;
};
window.xhr1.onreadystatechange = function() { myFunction(xhr1) };
window.xhr2.onreadystatechange = function() { myFunction(xhr2) };
window.xhr3.onreadystatechange = function() { myFunction(xhr3) };
window.xhr4.onreadystatechange = function() { myFunction(xhr4) };
قضیه ی Binary رو فراموش نکردم، فقط باید یکمی بیشتر بگردم، اگر تو هم به جاهایی رسیدی، مارو بی خبر نزار.کد:window.xhr = new XMLHttpRequest();
یا
window.xhr = function(){};
مرسی که جواب دادی.
ولی یه راه بهتر می خوام چون اینها رو دستی درست نمی کنم. با یه حلقه درست می کنم و تازه به همون تعداد هم تابع درست میشه. (از لحاظ Performanceی جالب نیست!)
+ مرسی که دنبال binary هستی.
++ عیدت مبارک!
سلام
کد زیر یه کلاسه که من برای ایجاد درخواست ای جکس و ارسال و دریافت نتیجه درخواست استفاده میکنم. به هیچ عنوان نمیشه با کمک متغیرهای سراسری مشکلشو حل کرد چون توی هر صفحه به تعداد نامحدود درخواست ایجاد میشه!
توی هر مرورگری که داشتم کار کرد به جز مرورگرهای فایر فوکس 2 و اینترنت اکسپلورر 6
[html]
function ajaxObj() {
/**
* Creates xmlHttp request object
*/
this.req = new function() {
var req = null;
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
} else if (window.ActiveXObject){
req = new ActiveXObject("Msxml2.XMLHTTP");
if (!req){
req = new ActiveXObject("Microsoft.XMLHTTP");
}
}
if(!req) {
alert('مرورگر شما از ای جکس پشتیبانی نمیکند! لطفاً از یک مرورگر دیگر برای مشاهده این صفحه استفاده کنید');
return false;
}
return req;
}
/**
* Sends Ajax request
* @param method request method
* @param uri request url
* @param content request contents
*/
this.sendData = function (method, uri, content) {
if(method == 'GET') {
uri = uri + '&' + content;
content = null;
}
this.req.open(method, uri, true)
this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
this.req.send(content);
}
this.req.onreadystatechange = function() {
if(this.readyState==4) {
if(this.status!=200) {
alert(WRONG_HTTP_STATUS);
} else {
obj_page.handleResponseXML(this.responseXML);
}
covers.create(this).hide();
}
}
}
[/html]
مشکلش هم تقریباً میدونم از کجاس ولی همچین حیرونم کرده چون هر مدلی هم که تغییرش دادم تا بشه در قالب همین کلاس متد onreadystatechange اونو بنویسم نشد که نشد!
درخواست درست فرستاده میشه و جوابش هم درست میگیره اما مرورگر نمیتونه وضعیت درخواست (readyState) رو تشخیص بده! یعنی توی متد this.req.onreadystatechange مقدار readyState برای اون دو تا مرورگر همیشه undefined هست!
اما اگر متدی رو که گفتم بی خیال شم و وضعیت رو بیرون از کلاس چک کنم درست کار میکنه! یعنی اینجوری کارمیکنه:
[html]
var ajax = new ajaxObj();
ajax.sendData("GET", "http://script_address", "");
ajax.req.onreadystatechange = function(){
alert(ajax.req.readyState);
}
[/html]
اما خوب اگر قرار باشه اینجوری استفاده کنم باید تعداد زیادی متد به هر کلاسی که یه درخواست میفرسته برای گرفتن پاسخ بنویسم که حجمش زیاد میشه!
حالا چه کنیم که این دو تا مرورگر هم رضایت بدن؟ میخوام هر چی هست در قالب همون کلاس ajaxObj باشه!
داداش من قبل از تو زنبیل گذاشتم!
اگر یکی 2 تا پست قبل رو می خوندی، می فهمیدی که من هم مشکلم با همین this ه.
که this یه جا class ت رو میده و یه جا XHR ت رو!
سلام.نقل قول:
:31:
اگر دقت کنی یکی از مشکلهای بالایی که مسیح داشت همین موضوعه! ظاهرا فعلا نمی شه هیچ کاریش کرد، یعنی توی متد onreadystatechange توی این مرورگر ها نمی شه، از اشاره گر this برای دسترسی به شیء xhr استفاده کرد! باید دقیق خودش رو صدا بزنی.
برای کار تو فکر همینجوری هم جواب بده:
به احتمال زیاد باید این روش جواب بده:31:کد:this.req.readyState...
this.req.status...
ها شرمنده مسیح جون شلوغ پلوغ بود زنبیلتو ندیدم :31:
اگه بخوام از this.req.readyState توی onreadystatechange استفاده کنم فکر کنم توی مرورگرهایی که قبلاً مشکل نداشتن مشکل پیدا بشه ها! یعنی کلاً بی خیالش شم؟
برای شما میشه این کار رو کرد:
ولی برای من!کد:var rd;
if (this.req.readyState){
rd = this.req.readyState;
}else{
rd = this.readyState;
}
سلام
این کد ایجکس منه که به یه صفحه php وصل میشه و عددی رو که به صورت رندوم تو اون صفحه ایجاد شده میگیره و نشون میده
[html]function getdata(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
xmlhttp = new
ActiveXObject('Microsoft.XMLHTTP'); } catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
if(xmlhttp){
var obj = document.getElementById(divid);
xmlhttp.open("GET", 'random.php');
xmlhttp.onreadystatechange = function()
{
obj.innerHTML = xmlhttp.responseText;
}
xmlhttp.send(null);
}
}
</script> [/html]یه دکمه هست که با هر بار کلیک کردنه اون از صفحه php عدد رندوم گرفته میشهو نمایش داده میشه
تویه همه مرورگر ها کار میکنه به جز ie که فقط بار اول که کلیک میکنم یه عدد رو نشون میده و لی با کلیک دوباره عدده جدیدی جایگزین نمیشه
این اررور رو میده the data necessary to compelet this oprition is not yet available
نه اینم کار نمیکنه مجبور شدم کلاً ببرمش بیرون از این کلاس! خوشبختانه یه دونه parent داشتم برای همه صفحات گذاشتمش تو اون :31:نقل قول:
مشخص نیس این this به کجاش وصله؟ نه به window اشاره میکرد نه به کلاس اصلی ajax! با ie6 توی متد onreadystatechane مشکل دار آلرت میکردم یه تابع رو برام چاپ میکرد این مدلی:
یعنی دقیقاً کد تابعش رو! انگار که بهش استرینگ داده باشی!کد:function() {
alert(this);
}
اولاً:
xmlhttp.open یه ورودی سوم هم داره که خیلی ربطی نداره.
دوماً:
شما باید چک کنی که readyStateش 4 باشه و statusش 200 باشه.
کد:
function getdata(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
xmlhttp = new
ActiveXObject('Microsoft.XMLHTTP'); } catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
if(xmlhttp){
var obj = document.getElementById(divid);
xmlhttp.open("GET", 'random.php', true);
xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState==4) {
if(xmlhttp.status==200) {
obj.innerHTML = xmlhttp.responseText;
}
}
}
xmlhttp.send(null);
}
}
راستش من کد ها رو تویه wamp تست میکنم هر وقت این شرط
if(xmlhttp.readyState==4)
if(xmlhttp.status!=200)
رو میزارم تو کد هام دیگه اصلا کار نمیکنه تو هیچ مرورگری
گفتم حتما به خاطر مشکلات سرور مجازیه بعد که آپلود کنم رو هاست حل میشه
برایه همین این شرط ها رو برداشتم و مشکل حل شد و برنامه کار میکنه فقط
این یدونه کد تویه ie با هر بار کلیک اطلاعاتش آپدیت نمیشه و فقط همون اطلاعات اولیه رو نشون میده
وقتی اررور کنسول رو باز میکنم از این خط اشکال میگیره
obj.innerHTML = xmlhttp.responseText;
شما تا حالا این کارو با ie انجام ندادید که با هر بار کلیک اطلاعات جدید رو نشون بده ؟
اینی که میگی احتمالاً مال cache شدنه.
این رو به آخر URL ت اضافه کن ببین چی میشه:
کد:+ "&r=" + new Date().getTime()
اون قسمت که رنگیش کردم فکر کنم اشتباه تایپی شده. باید این باشه:نقل قول:
----------------------------------------------------کد:if(xmlhttp.status==200)
بچه ها یه مشکل دیگه!
فایر فوکس برای محتویات تگ xml محدودیت کاراکتر داره؟ من هر کاری کردم نشد که بیشتر از 4294 کاراکتر رو از یک تگ که با responseXML لود شده بود توی صفحه وارد کنم! کدم اینه:
[HTML]contentsNode = responseXML.getElementsByTagName('contents')[0];
if(contentsNode.hasChildNodes()) {
elem("page-contents").innerHTML = contentsNode.childNodes[0].nodeValue;
}[/HTML]
با اینترنت اکسپلورر مشکلی نداره ولی اطلاعاتش چون حجم زیادی داره توی فایرفوکس آخرشو حذف میکنه!
اونو که اضافه میکنم not found میده
اگه ممکنه شما یه بار رو دستگاهت این صفحه رو اجرا کن ببینم مشکل از منه یا یه جایه دیگه
کد:http://www.speedyshare.com/408898532.html
من تست میکنم ببینم میتونم مشکلشو پیدا کنم.نقل قول:
-----------------------
راستی این طور که فهمیدم فایر فوکس یه محدودیت 4 کیلوبایتی داره اون عددی هم که تو پست قبلی گفتم دقیقش 4096 بود که همون 4 کیلوبایته
حالا این محدودیته برا چیا اعمال میشه و چطوری میشه دورش زد رو نفهمدیم هنوز!
سلام.نقل قول:
نتونستم دیروز سر بزنم:31:
خوبه که مشکلت حل شده، ولی اگر هنوز می خوای تمام کارها رو توی کلاس انجام بدی به صورت زیر استفاده کن:
تابع this.req() رو توی constructor کلاست فرواخوانی کن. بعد اینجوری می تونی ازش استفاده کنی:کد:this.xhr = null;
this.req = new function() {
if(window.XMLHttpRequest){
this.xhr = new XMLHttpRequest();
} else if (window.ActiveXObject){
this.xhr = new ActiveXObject("Msxml2.XMLHTTP");
if (!this.xhr){
this.xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
if(!this.xhr) {
alert('مرورگر شما از ای جکس پشتیبانی نمیکند! لطفاً از یک مرورگر دیگر برای مشاهده این صفحه استفاده کنید');
return false;
}
return this.xhr;
}
this.req();
کد:this.xhr.readyState...
this.xhr.status...
اول از همه باید، توی ie حتما از این شرط استفاده بشه تا دیگه ارور نده:نقل قول:
مشکل بعدی هم بخاطر کش شدن هست، که مسیح آموزشش رو گذاشت. دقیقا از همون راه استفاده کنید این مشکلتون حل می شه.کد:if(xmlhttp.readyState==4) {
با متد POST هم همین محدودیت رو داره؟ یا نه هر دوتاشون رو تست کردی؟نقل قول:
مثل اینکه فایرفوکس اجازه نمیده حجم هیچ نودی از 4 کیلو بایت بیشتر بشه و نودهایی رو که حجم بیشتری دارن اسپلیت میکنه به چند تا نود! منم میخواستم همه کد گرفته شده توی نود contents رو بگیرم و بریزم توی یه div
راه حلش هم پیدا کردم. توی فایرفوکس childNodes[0].nodeValue شامل 4 کیلوبایت اول هست و بقیه میره تو childNodes[1].nodeValue. امافایرفوکس textContent هم برای هر نود داره که همه داده های اون نود رو داره و اسپلیت هم نمیشه.
اینجوری حلش کردم:
کد:contentsNode = responseXML.getElementsByTagName('contents')[0];
if(contentsNode.hasChildNodes()) {
try{
elem("page-contents").innerHTML = html_entity_decode(contentsNode.textContent);
}catch(e){
elem("page-contents").innerHTML = html_entity_decode(contentsNode.childNodes[0].nodeValue);
}
}
راستی اسکرپت ای جکسم شد این:
this.req که اتوماتیک ساخته میشه دیگه نیازی به فراخوانی نداره! فقط میخواستم onreadyStateChange رو هم بزارم توی همین کلاس که نشد!کد:/**
* returns a instanse of xmlhttp request
*/
function ajaxObj(){
/**
* Creates xmlHttp request object
*/
this.req=new function(){
var req=null
if(window.XMLHttpRequest){
req=new XMLHttpRequest()
}else if(window.ActiveXObject){
req=new ActiveXObject("Msxml2.XMLHTTP")
if(!req){
req=new ActiveXObject("Microsoft.XMLHTTP")
}
}
if(!req){
alert('مرورگر شما از ای جکس پشتیبانی نمیکند! لطفاً از یک مرورگر دیگر برای مشاهده این صفحه استفاده کنید')
req=false
}
return req
}
/**
* Sends Ajax request
* @param method: request method
* @param uri: request url
* @param content: request contents
*/
this.sendData=function(method,uri,content) {
if(method == 'GET') {
uri=uri+'&'+content
content=null
}
this.req.open(method,uri,true)
this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8")
this.req.send(content)
}
}
از اون روشی که گفتم استفاده کردی؟ از اون استفاده کن دیگه نیازی نیست onreadystatechange رو ببری بیرون از کلاس!
بعدش به این دلیل گفتم this.req رو فراخوانی کن، که ما چون داریم از this.xhr استفاده می کنیم، و این رو توی متد this.req مقدار دهی کردیم، باید اون رو فراخوانی کنیم که مقدار دهی بشه و اِلا کار نمی کنه.
کد:/**
* returns a instanse of xmlhttp request
*/
function ajaxObj(){
/**
* Creates xmlHttp request object
*/
this.xhr = null;
this.req = new function() {
if(window.XMLHttpRequest){
this.xhr = new XMLHttpRequest();
} else if (window.ActiveXObject){
this.xhr = new ActiveXObject("Msxml2.XMLHTTP");
if (!this.xhr){
this.xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
if(!this.xhr) {
alert('مرورگر شما از ای جکس پشتیبانی نمیکند! لطفاً از یک مرورگر دیگر برای مشاهده این صفحه استفاده کنید');
return false;
}
return this.xhr;
};
/**
* Sends Ajax request
* @param method: request method
* @param uri: request url
* @param content: request contents
*/
this.sendData = function (method, uri, content) {
if(method == 'GET') {
uri = uri + '&' + content;
content = null;
}
this.xhr.open(method, uri, true)
this.xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
this.xhr.send(content);
};
this.xhr.onreadystatechange = function() {
if(this.xhr.readyState==4) {
if(this.xhr.status!=200) {
alert(WRONG_HTTP_STATUS);
} else {
obj_page.handleResponseXML(this.xhr.responseXML);
}
covers.create(this).hide();
}
};
this.req();
}
سلام من ميخوام يه جدول جستجو بر اساس نام و يه كدي بسازم با php هم كار ميكنم ولي اينجاشو(برا جستجوش )بايد از Ajax كمك بگيرم چون با تايپ كاراكتر تو هر كدوم از تكست باكساي كد يا نام بايد بره روي همون نام يا كد تو جدوله. تو رو خدا كمكم كنين.جستجوشو با Php انجام دادم ولي كاري كه استاد از من ميخواد با Ajax حل ميشه و متاسفانه بلد نيستم. در ضمن ناما و كدارو از ديتابيسم تو جدول ميخونم.ديتابيسم mysqlهستش.