当您说“外部”网址时,您指的是不是运行此页面的网站?如果是这样,我最初的想法是您遇到了 ajax 调用的安全限制。
见:http ://en.wikipedia.org/wiki/Same_origin_policy
如果您尝试对远程服务器进行 ajax 调用,它将在没有错误的情况下执行,但响应将完全空白。浏览器不允许您使用响应做任何事情。我似乎记得因为成功或错误事件都不会触发而感到沮丧,因为jQuery没有什么可以做出决定的。
您需要将sites.php 放在同一个站点上,或者创建一个本地php 页面来获取远程文件。如果您这样做,那么您的 ajax 调用可以从您的 php 脚本本地检索远程文件。
下面是一些我们用来通过 UltraCart 代理 ajax 调用的代码:(我们不是 php 商店,所以我希望能提供一些关于如何改进它的建议。)我们将它安装在本地机器上,并使用它来代理我们的 ajax来电。
<?php
$server_get_url = "https://www.myremoteserver.com/somepage.php";
$post_data = file_get_contents('php://input');
foreach($_SERVER as $i=>$val) {
if (strpos($i, 'HTTP_') === 0) {
$name = str_replace(array('HTTP_', '_'), array('', '-'), $i);
$header[$name] = $val;
}
}
$header[] = "Content-Length: ". strlen($post_data);
$ch = curl_init( $server_get_url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
if ( strlen($post_data)>0 ){
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
$response = curl_exec($ch);
if (curl_errno($ch)) {
print curl_error($ch);
} else {
curl_close($ch);
// our page returns back json ... you may need to adjust this.
header('Content-type: application/json');
print $response;
}
?>