استفاده از چند XMLHttp

سلام دوستان

امروز یه سوال دارم که اگه این رو کمک کنید ممنون میشم
چون در http://forum.majidonline.com/showthread.php?t=180399 هیچ جوابی ازتون نگرفتم.

من دارم یک سایت با AJAX درست می کنم و یک تابع برای استفاده از AJAX نوشتم و خیلی هم خوب کار می کنه.

اما یک مشکلی که دارم نمی دونم چطوری تایع get رو تغییر بدم تا بتونم همزمان در یک صفحه از چند XMLHttp استفاده کنم تا از ایجاد توایع اضافه جلوگیری کنم.

چون خوده تابع get همه کارهای مورد نیاز منو رو انجام میده.

Ajax.js

کد:
function $(id){
	return document.getElementById(id);
}

function GetXMLHttpObject(){
	var XMLHttp = null;
	try{
		XMLHttp = new XMLHttpRequest();
	}
	catch(e){
		try{
			XMLHttp = new ActiveXObject("Msxml2.XMLHttp");
		}
		catch(e){
			XMLHttp = new ActiveXObject("Microsoft.XMLHttp");
		}
	}
	return XMLHttp;
}

function get(send_method, program, page, send, get_by){
	XMLHttp = GetXMLHttpObject();
	var method = send_method.toUpperCase();
	var file = "programs/"+ program +"/"+ page;
	if(method == "GET"){
		file = file +"?"+ send;
		send = null;
	}

	XMLHttp.open(method, file, true);

	if(method == "POST"){
		XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		XMLHttp.setRequestHeader("Content-length", send.length);
		XMLHttp.setRequestHeader("Connection", "close");
	}

	var get = get_by.toLowerCase().split(":");
	if(get[0] == "id"){
		XMLHttp.onreadystatechange = function(){
			if(XMLHttp.readyState==4){
				var cacheResponse = XMLHttp.responseText;
				$(get[1]).innerHTML = cacheResponse;
				runScript(cacheResponse);
			}else{loading(get[1])}
		}
	}

	if(get[0] == "function"){XMLHttp.onreadystatechange = eval.call(window, get[1]);}

	XMLHttp.send(send);
}

function runScript(cacheResponse){
	if(!!window.execScript){
		window.execScript(getScript(cacheResponse));
	}else{
		eval.call(window, getScript(cacheResponse));
	}
}

function getScript(response){
	var scripts;
	response.replace(/<script[^>]*>([\s\S]+)<\/script>/gi, function(match, scr){
		scripts = scr;
	});
	return scripts;
}

function loading(id){
	$(id).innerHTML = "<p align=\"center\"><img src=\"loading.gif\" border=\"0\"><br><br>... در حال بارگزاری</p>";
}

من فقط می خوام از تکرار جلوگیری کنم.

و لطفا استفاده از JQuery را پیشنهاد ندهید.

باتشکر
 

eAmin

Well-Known Member
تابع get رو طوری تغییر بدید که شئ xmlhttp رو از طریق پارامتر دریافت کنه. به این طریق هر وقت تابع get فراخوانی بشه، یک شئ جدید xmlhttp رو فراخوانی میکنه.
کد:
function get(send_method, program, page, send, get_by, XMLHttp){
    var method = send_method.toUpperCase();
    var file = "programs/"+ program +"/"+ page;
    if(method == "GET"){
        file = file +"?"+ send;
        send = null;
    }

    XMLHttp.open(method, file, true);

    if(method == "POST"){
        XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        XMLHttp.setRequestHeader("Content-length", send.length);
        XMLHttp.setRequestHeader("Connection", "close");
    }

    var get = get_by.toLowerCase().split(":");
    if(get[0] == "id"){
        XMLHttp.onreadystatechange = function(){
            if(XMLHttp.readyState==4){
                var cacheResponse = XMLHttp.responseText;
                $(get[1]).innerHTML = cacheResponse;
                runScript(cacheResponse);
            }else{loading(get[1])}
        }
    }

    if(get[0] == "function"){XMLHttp.onreadystatechange = eval.call(window, get[1]);}

    XMLHttp.send(send);
}

get(send_method, program, page, send, get_by, GetXMLHttpObject());
get(send_method, program, page, send, get_by, GetXMLHttpObject());
get(send_method, program, page, send, get_by, GetXMLHttpObject());
get(send_method, program, page, send, get_by, GetXMLHttpObject());
 
بسیار ممنون

به خوبی جواب داد.

فقط یک سوال : البته به این مطلب مربوط نمیشه ولی با اجازه اینجا می پرسم.

آیا در ارسال اطلاعات از ajax با متد get محدودیت ارسال وجود دارد؟؟؟؟

منظور از نظر تعداد کاراکترهایی هست که میشه فرستاد.

آیا میشه یه متن بیشتر از 600 کاراکتر رو فرستاد؟؟؟؟؟

اینم اضافه کنم از متد post خبر دارم که محدودیت نداره
و get چون در نوار آدرس مروگر وارد میشه، بستگی به نوع مرورگر داره.

اما ajax عملا چون در مرورگر اطلاعات رو وارد نمیکنه آیا با این مشکل مواجعه هست؟؟؟؟؟

باتشکر
 

eAmin

Well-Known Member
در استانداراد HTTP/1.1 هیچ محدودیتی برای متد get لحاظ نشده، این بستگی به مرورگر و وب سرور مورد استفاده داره تا بتونه این اطلاعات رو دریافت و بخونه.

ولی در متد get بصورتی که در مرورگرها و ... پیاده سازی شده، درحالت معمول شما مجاز به ارسال فقط 8000 ( ؟ بصورت تقریبی) کاراکتر هستید و بیشتر از اون رو نمیتونید توسط این متد به سرور ارسال کنید. و ربطی به اینکه در نوار آدرس وارد نشده نداره چون این امر رو در سطح پایین تر پیاده سازی میکنند طبق استانداردهای از پیش تعیین شده.
 

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

بالا