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 変数が渡されます。これには、アプリの URL のようなベース " http://server/theappname " が含まれている必要があります。