J1.5

Difference between revisions of "Adding AJAX to your component"

From Joomla! Documentation

Line 1: Line 1:
 
To add ajax to your component:
 
To add ajax to your component:
  
 +
== Phase 1 ==
 
1- Make the necessary javascript ajax functionality in your default.php (or other layout)
 
1- Make the necessary javascript ajax functionality in your default.php (or other layout)
  
 
   ex.  
 
   ex.  
 
+
<source lang="javascript">
    <script>
+
 
 
function ajxGetCitys(country_id){
 
function ajxGetCitys(country_id){
 
        
 
        
Line 54: Line 55:
 
       xhr.open("GET","index2.php?option=com_user&task=listcity&country_id="+country_id,true);
 
       xhr.open("GET","index2.php?option=com_user&task=listcity&country_id="+country_id,true);
 
       xhr.send(null);
 
       xhr.send(null);
}
+
}</source>
</script>
 
  
  
 +
== Phase 2 ==
 
2- in the controller.php add new function (or task)like listcity in the above example:
 
2- in the controller.php add new function (or task)like listcity in the above example:
  
 
example:
 
example:
 
+
<source lang="php">
 
function listcity()
 
function listcity()
 
   {  
 
   {  
Line 82: Line 83:
 
       $mainframe->close();
 
       $mainframe->close();
 
    
 
    
   }
+
   }</source>
  
3- Here  i have a methode getStates($country_id) in the register model to extract the list countries from my bdd ,you can  adapt to your needs and test .Good luck
+
3- Here  i have a methode getStates($country_id) in the register model to extract the list countries from my bdd ,you can  adapt it to your needs .Good luck

Revision as of 09:11, 30 July 2008

The "J1.5" namespace is an archived namespace. This page contains information for a Joomla! version which is no longer supported. It exists only as a historical reference, it will not be improved and its content may be incomplete and/or contain broken links.

To add ajax to your component:

Phase 1[edit]

1- Make the necessary javascript ajax functionality in your default.php (or other layout)

 ex. 
   
function ajxGetCitys(country_id){
      
    var xhr = getXhr();
    // On défini ce qu'on va faire quand on aura la réponse
    xhr.onreadystatechange = function(){
      // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
     
      if(xhr.readyState == 4 && xhr.status == 200){
          var city=document.getElementById('city');
          
          try //Internet Explorer
          {
            xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async="false";
            xmlDoc.loadXML(xhr.responseText);
          }
        catch(e)
          {
          try //Firefox, Mozilla, Opera, etc.
            {
              parser=new DOMParser();
              xmlDoc=parser.parseFromString(xhr.responseText,"text/xml");
            }
          catch(e) {alert(e.message)}
          }
        
          var options =xmlDoc.getElementsByTagName('options').item(0);
          city.innerHTML='';
        
          for (i=0; i < options.childNodes.length; i++){          
            var newoption=document.createElement("option");
            var myoption=options.childNodes[i];
            var newtext=document.createTextNode(myoption.childNodes[0].nodeValue);
            newoption.setAttribute("value",myoption.getAttributeNode('id').value)
            newoption.appendChild(newtext);
            city.appendChild(newoption);
          
           // alert( myoption.getAttributeNode('id').value+ " " + myoption.childNodes[0].nodeValue);
           
          }
        
            
      }
    }
    
    
      xhr.open("GET","index2.php?option=com_user&task=listcity&country_id="+country_id,true);
      xhr.send(null);
}


Phase 2[edit]

2- in the controller.php add new function (or task)like listcity in the above example:

example:

function listcity()
  { 
  
     global $mainframe;
     $country_id=JRequest::getVar( 'country_id');
     $model = $this->getModel('register');
     $states = $model->getStates($country_id);
     
     $return = "<?xml version=\"1.0\" encoding=\"utf8\" ?>";
     $return .= "<options>";
     $return .= "<option id='0'>".JText::_( '---Select city---' )."</option>";
     if(is_array($states)) {
        foreach ($states as $state) {
         	$return .="<option id='".$state->state_id."'>".JText::_($state->state_name)."</option>";
        }
      }
      $return .= "</options>";
      echo $return;      
      $mainframe->close();
   
  }

3- Here i have a methode getStates($country_id) in the register model to extract the list countries from my bdd ,you can adapt it to your needs .Good luck