using Sajax with multiple scripts
by kae verens on Jul.25, 2005, under ajax, javascript, php
My CMS is getting pretty large. So, in order to save the end-user from downloading potentially 100ks of javascript, I’ve started modularising my code; separating the scripts based on their overall purpose.
A problem arose today, where I was using Sajax from two separate external scripts for two different parts of my document. Suddenly, I was getting Error: some_function not callable alerts.
A bit of digging revealed that the stub handler of Sajax, sajax_do_call(), has the URL of the script that created it hard-coded into itself.
Because the handler is a function, it meant that when script A and script B were loaded, the stub handler of script B would overwrite the handler for script A, so the scripts would basically forget how to call the PHP side of the transactions.
So, there was a dilemma – fix Sajax, or only use one Ajax script per page. The answer to that was simple – fix Sajax.
The solution is to rip out the hardcoded URL in sajax_do_call():
uri = "<?php echo $sajax_remote_uri; ?>";
and replace it with a more extendable version:
uri = function_urls[func_name];
So now, when Sajax is asked to handle a function, instead of requesting the server response from a hard-coded source, it checks frist to see what source the function was defined by.
To fill the function_url with its required values, place the following line after the definition of x_<?php echo $func_name; ?>() (it’s in sajax_get_one_stub()):
function_urls['<?=$func_name;?>']='<?=sajax_get_my_uri();?>';
The next bit was tricky – we need to initialise the array function_urls, but only if the variable has not already been initialised (otherwise, script B would again overwrite script A).
I couldn’t find a JavaScript equivalent of isset(), so had to come up with an ugly piece of code which does the job (which I described in an earlier post).
try{
if(function_urls)blah=1/0;
}catch(e){
function_urls=[];
}
January 18th, 2006 on 8:47 pm
hello,
I’m beginner using sajax. I want to do the same selector then http://www.mac-allister.com/offres_emploi.php?var_menu=Candidat,
can you help me ? thos objective is to have the result of the query without relaoding the page
January 16th, 2008 on 11:52 pm
This is very interesting but where should the last part be? I’m stuck.