PDA

View Full Version : استفاده از xmlHttprequest در یک حلقه loop



akram_raeespour
جمعه 15 شهریور 1387, 11:36 صبح
سلام
من در جاوا اسکریپت و Ajax تازه کارم. و می خواهم از آبجکت xmlHttprequest در یک حلقه استفاده کنم. کد اولیه من در استفاده یک بار از این شی به خوبی کار می کرد اما وقتی در حلقه قرار می گرفت فقط دفعه اول اجرا می شد.
در اینترنت زیاد سرچ کردم و راه حل هایی مثل استفاده از timeinterval() پیشنهاد شده بود. اما نمی خواهم از این روش استفاده کنم چون که معلوم نیست که هر request که به سرور می فرستم چقدر زمان می برد که انجام شود.
من یک کد پیدا کردم که طریق استفاده از xmlhttprequest را در حلقه را با شیوه ای متفاوت از کد من داشت. اما چون خیلی جاوا اسکریپت بلد نیستم، نتونستم از این کد استفاده کنم. می خواستم که شما در استفاده از این کد به من کمک کنید.
من می خواهم در یک حلقه هر بار متغیری را با استفاده از xmlhttprequest به سرور ارسال کنم و مثلا اسکریپت PHP من آن را چاپ کند. اگر این کار انجام شود مشکل من حل می شود.
لینک کد این است.
http://drakware.com/?e=3
و این طریقه استفاده من از این کد است. فرض کنید insertuser.php فقط متغیر K را چاپ می کند.
<html>
<head>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-16">
</head>
<script src="sha-1factory.js"></script>
<Script Language="JavaScript">
var fileLines,Stringobject;
var url;
var fs, a, ForAppending,fileContent;
var k;
var xmlreqs = new Array();
function CXMLReq(freed) {
this.freed = freed;
this.xmlhttp = false;
if (window.XMLHttpRequest) { this.xmlhttp = new XMLHttpRequest(); }
else if (window.ActiveXObject) {
this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
//////////////////
function xmlhttpChange(pos) {
if (typeof(xmlreqs[pos]) != 'undefined' && xmlreqs[pos].freed == 0 && xmlreqs[pos].xmlhttp.readyState == 4) {
if (xmlreqs[pos].xmlhttp.status == 200 || xmlreqs[pos].xmlhttp.status == 304) {
handle_response(xmlreqs[pos].xmlhttp.responseXML);
} else {
handle_error();
}
xmlreqs[pos].freed = 1;
}
}
//////////////
function xmlreqGET(url) {
var pos = -1;
for (var i=0; i<xmlreqs.length; i++) {
if (xmlreqs[i].freed == 1) { pos = i; break; }
}
alert(url);

if (pos == -1) { pos = xmlreqs.length; xmlreqs[pos] = new CXMLReq(1); }
if (xmlreqs[pos].xmlhttp) {
xmlreqs[pos].freed = 0;
xmlreqs[pos].xmlhttp.open("GET",url,true);
xmlreqs[pos].xmlhttp.onreadystatechange = function() {
if (typeof(xmlhttpChange) != 'undefined') { xmlhttpChange(pos); }
}
if (window.XMLHttpRequest) {
xmlreqs[pos].xmlhttp.send(null);
} else if (window.ActiveXObject) {
xmlreqs[pos].xmlhttp.send();
}
}
}
//////////
function handle_response(t){
document.getElementById("SeeTextAreaName").innerHTML =t
}
////////////
function Upload() {
/
url="insertuser.php";
k = 5;
while (k<9){
url=url + "?usern=" + k;
url=url + "&sid=" + Math.random();
xmlreqGET(url)
k++;
}
}
</Script>
<body>
<p><Input Type="Button" Value="Upload" OnClick="Upload()"></p>

<p><div id="SeeTextAreaName">
Initial value of a div.</div></p>

</body>
</html>

maysamscript
جمعه 15 شهریور 1387, 15:29 عصر
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>
<script>
function createxmlobject()
{
if (window.XMLHttpRequest)
{ // if Mozilla
objXML=new XMLHttpRequest();
if (objXML.overrideMimeType)
objXML.overrideMimeType('text/html');
}
else if (window.ActiveXObject)
{ // if IE
try {
objXML=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try{
objXML=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
objXML = null;
}
}
}
return objXML;
} //createxmlobject

function getpagerebulid(query,Item)
{
var objXML=createxmlobject();

if(objXML!=null)
{
var tmpx=new Date().getTime();
objXML.onreadystatechange =function()//getresults;
{

if(objXML.readyState == 4)
{
if(objXML.status == 200)
{
get_data(objXML.responseText,Item);
indicator(Item,false);

}

else
{
//alert("ERROR");
}
}

}
indicator(Item,true);
objXML.open("POST", "ajax.php" , true);
objXML.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
objXML.send(query + "&r=" + tmpx);
}
return false;
} //getpagerebulid
function get_data(data,Item)
{
document.getElementById(Item).innerHTML=data;
}
function indicator(Item,bool)
{
if(bool) document.getElementById(Item).innerHTML="please wait...";
}

function loop()
{
for(i=0;i<3;i++)
{
getpagerebulid("item="+i,"Item_"+i);
}
}
</script>
<input type="button" value="start" onClick="loop()">
<div id="Item_0">-</div>
<div id="Item_1">-</div>
<div id="Item_2">-</div>
</body>
</html>
ajax.php


echo "Item_".$_POST['item'];

akram_raeespour
جمعه 15 شهریور 1387, 18:18 عصر
سلام
از کدتون واقعا متشکرم. جواب داد.
فقط یک سوال

for($i=0;$i<10000000;$i++){}//برای ایجاد وقفه
این قسمت کد برای چی هست؟ چون که روی localhost کد بدون این هم کار می کنه.
در کد واقعی من حلقه for باید حداقل 10000 بار تکرار بشه و این که کد PHP من هم باید با database کار کنه. بنابراین نگرانم که اونجا دچار مشکل بشه. فکر می کنم که این کد انتظار به این که در تعداد تکرار زیاد کار کنه ربط داشته باشه.

maysamscript
جمعه 15 شهریور 1387, 22:39 عصر
نه اصلاً هیچ ربطی نداشت. یه اشتباه بود که اصلاح کردم