正如 mmattax 提到的,最简单的方法是使用代理脚本。
这是我用来调用另一个域的脚本,将一个 urlencoded proxy_url 参数传递给它。
url_proxy.php
// Is it a POST or a GET?
$url = ($_POST['proxy_url']) ? $_POST['proxy_url'] : $_GET['proxy_url'];
// Open the Curl session
$session = curl_init($url);
// If it's a POST, put the POST data in the body
if ($_POST['proxy_url']) {
$postvars = '';
while ($element = current($_POST)) {
if (key($_POST) != 'proxy_url') {
$postvars .= key($_POST).'='.$element.'&';
}
next($_POST);
}
curl_setopt ($session, CURLOPT_POST, true);
curl_setopt ($session, CURLOPT_POSTFIELDS, $postvars);
}
// Don't return HTTP headers. Do return the contents of the call
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// Make the call
$response = curl_exec($session);
// Return the response
if (curl_errno($session)) {
$error_message = curl_error($session);
echo 'Error: '.$error_message;
} else {
echo $response;
}
curl_close($session);
?>
在您的情况下,您可能希望更改错误处理位以返回您的应用程序可以解析的有效 xml 位。
我通常把它放在我的 webroot 中,然后从 javascript 中调用它,例如:
function showMapLegend(baseURL, layer) {
var url = 'http://our-map-server/get-a-legend.php?layer='+layer;
var dt = new Date();
var proxy = baseURL + '/url_proxy.php?currDate='+dt.getTime()+'&proxy_url=';
url = proxy + encodeURIComponent(url);
new Ajax.Request(url, {
method: 'get',
onSuccess: function(transport) {
$('map-legend-img').src = transport.responseText;
new Effect.Appear('map-legend', {duration: 0.5});
}
});
}
上面的示例 javascript 函数用于从我们的地图服务器获取一个简单的 url 字符串,我们不关心它是否失败,所以没有 onFailure 等,它主要是原型,但我相信你明白这是怎么回事使用代理脚本。
baseURL 变量被传入,它应该包含基本的“ http://server/theappname ”,比如你的应用程序的 url。