Jump to content
php.lv forumi

XMLhttp request - teksta piešķiršana mainīgajam


Gacha

Recommended Posts

Vajadzīga elementāra lieta, ar XMLhttp funkciju izsaucu urli ar attiecīgajiem parametriem un iegūstu atbildi, šo atbildi nepieciešams apstrādāt šai pašā funkcijā, bet man neizdodas to dabūt, iegūstu vērtību tikai 2x izsaucot funkciju, saprotu, ka kaut kas nav pareizi ar to data, bet kas tieši, nevaru saprast.

 

var data = '';
function bumbum(){
var xmlhttp = false;
 try{xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");}
 catch(e){try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}
 catch(e){try { xmlhttp = new XMLHttpRequest();}
 catch(e){xmlhttp = false;}}}
 if(!xmlhttp) return null;

 xmlhttp.open("GET",'atbilde.php',true);
 xmlhttp.onreadystatechange = function(){if(xmlhttp.readyState==4){data = xmlhttp.responseText}}
 xmlhttp.send(null);
 alert(data);
return false;
}

Link to comment
Share on other sites

Nomaini true trešajā parametrā uz false open() fjai.

 

Edit: kāpēc tā notiek? true - asinhronais izsaukums, alert(data) nostrādās pirms vēl izsaukums beidzies (tb paralēli ar to data = ... responseText.

false - sinhronais, kods apstājas, līdz send patiešām beidz darbu.

 

Nu otrs variants - alert(data) linkt iekš tās tavas anonīmās fjas, nevis ārpusē. Kas laikam arī būtu viskorektāk.

Edited by bubu
Link to comment
Share on other sites

jā, te viss ir OK.

 

izņemot to ka tas alert(data) ir lieks... pieņemu ka tas ir ielikts `debugošanai`

izņem, un tālāk viss aizies :)

 

turklāt anonīmo funkciju labāk nomainīt uz kādu referenci, un tad `tā cita` f-ja izdara ko vajag

Link to comment
Share on other sites

alert() ir prieksh debugushanas. Nomainiju open() f-cijai pedejo parametru uz false un nekas nemainaas, tagad pat ar 2x neparadas iegutais teksts. Gribu, lai data mainigajam piešķirtu to vērtību un tālāk es to varētu apstrādāt.

Edited by Gacha
Link to comment
Share on other sites

Nu tad šitā te, un kamēr driikst_data_aiztikt==false, tad nedriikst aiztikt data:

var data = '';
var driikst_data_aiztikt = false;
function bumbum(){
 ...

  xmlhttp.open("GET",'atbilde.php',true);
  xmlhttp.onreadystatechange = function(){ 
       if (xmlhttp.readyState==4) { data = xmlhttp.responseText; driikst_data_aiztikt = true; }
   }
  xmlhttp.send(null);
  return false;
}

vai arī:

var data = '';
function bumbum(){
 ...

  xmlhttp.open("GET",'atbilde.php',false);
  xmlhttp.send(null);
  data = xmlhttp.responseText;
  return false;
}

Edited by bubu
Link to comment
Share on other sites

He, 2 variants strādā smuki un jauki, bet otrais gan ne.

19948[/snapback]

Abi ir otrie?

 

Vienīgais mīnuss otrajam variantam, manuprāt, ja ir lēns internets, tad browseris sastings uz pieprasījuma laiku (tipa nokārsies) :) Tas ir nesmuki. Labāk ir to asinhrono variantu ņemt, lai arī tas nedaudz sarežģītāks..

Edited by bubu
Link to comment
Share on other sites

Biju domajis, ka 2 strada, bet 1 nee :P

 

Nu nesanāk man izveidot tā kā 1 variantā, jo neizprotu to sistēmu. Varbūt varētu mazu piemēru, bet mazliet apgaismot arī, kas un kapēc.

Link to comment
Share on other sites

To es pamanīju, bet lietai, kur es izmantošu šo tehniku 99% lietotāji lieto IE. Bik kodu palabojot uzdabūju, ka uz IE arī strādā, tik ir vēl viena problēma - IE kaut ko kešo un tas man neder, jo atbildes var mainīties :/

Link to comment
Share on other sites

Pirms 2sec, kad refreshoju shito lapu, pats jau tik tālu biju aizdomajies, un tagad viss strādā, bet galvenais, ka arī izspratu to visu fišku par tiem kalbakiem un kā tas viss strādā.

Link to comment
Share on other sites

×
×
  • Create New...