input for stateChanged()

JavaScript and client side scripting.

Moderator: General Moderators

Post Reply
m2babaey
Forum Contributor
Posts: 364
Joined: Sun May 20, 2007 9:26 am

input for stateChanged()

Post by m2babaey »

Hi
When I want to define input variable for stateChanged, my code doesn't work
I don't want to define lots of stateChanged functions. How can I fix it?
This code doesn't work:

Code: Select all

function loadrealms(str)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Your browser does not support AJAX!");
  return;
  }
var url="ajaxphp.php";
url=url+"?action=loadrealms&region="+str;
xmlhttp.onreadystatechange=stateChanged('realmoptions');
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged(div_id)
{
if (xmlhttp.readyState==4)
  {
  document.getElementById(div_id).innerHTML=xmlhttp.responseText;
  }
}
But this code works fine:

Code: Select all

function loadrealms(str)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Your browser does not support AJAX!");
  return;
  }
var url="ajaxphp.php";
url=url+"?action=loadrealms&region="+str;
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged()
{
if (xmlhttp.readyState==4)
  {
  document.getElementById("realmoptions").innerHTML=xmlhttp.responseText;
  }
} 
User avatar
kaszu
Forum Regular
Posts: 749
Joined: Wed Jul 19, 2006 7:29 am

Re: input for stateChanged()

Post by kaszu »

Because stateChanged('realmoptions'); is a call to function, which returns nothing. Basically that's the same as

Code: Select all

xmlhttp.onreadystatechange=undefined;
Workaround:

Code: Select all

function stateChanged(div_id)
{
  //returns function, which will be as onreadystatechange event handler
  return function () {
    if (xmlhttp.readyState==4)
    {
      document.getElementById(div_id).innerHTML=xmlhttp.responseText;
    }
  }
}
Post Reply