Cross-Domain AJAX calls using PHP
AJAX has become the core component of many web applications around us. And its fairly easy to handle AJAX now a days, with the help of various javascript libraries (ex: jQuery, Prototype, Mootools, YUI, etc). But there is one security issue that web browsers impose in doing AJAX calls – they don’t let you do AJAX calls in web servers different than yours. That means, if your script is in www.mydomain.com and you’re trying to do AJAX call to www.anotherdomain.com/get.php, then the browser will through error like: “Error: uncaught exception: Permission denied to call method XMLHttpRequest.open”.
Now, there are a number of solutions to this problem. Instead of explaining them all to you, lemme provide you the simplest one: using a PHP transport file. If you already know the thing and just need the script, download from here.
Others, let’s see an example implementation first.
Example use
1: xmlHttp.onreadystatechange=function()
2: {
3: if(xmlHttp.readyState==4)
4: {
5: alert(xmlHttp.responseText);
6: }
7: }
8:
9: xmlHttp.open("GET", 'http://myserver.com/transport.php?action=' +
10: urlencode('different-server.com/return_call.php') +
11: '&method=get&data1=101&data2=pass', true );
12:
13: xmlHttp.send(null);
Now, lets see how it works:
- The script makes an AJAX call to the myserver.com/transport.php with a few parameters:
- action = the target URL you need to fetch, from a different domain
- method = the HTTP method (post/get)
- data1, data2 = sample parameters for using as either query-string or POST fields
- When the request is received by transport.php, it uses cURL to make a call to the page mentioned in action.
- Based on the method, it either makes a GET request or a POST request. In both cases, it sends the extra parameters that are sent.
- After the response is received, transport.php echoes it. So, you have what you need!
Download
transport.php Cross-Domain AJAX call transporter. Downloaded: [downloadcounter(transport)] times |
Comments and suggestions are most welcomed 🙂