我设置了书签。我在整个页面都有警报检查我的代码,由于某种原因我的ajax无法正常工作。它在localhost上运行得很好,但是当我在外部站点上测试时,它失败了
$.ajax({
url: "http://127.0.0.1/sites.php",
type:"POST",
data: "site_url="+urlValue
}).error(function(){
alert("error");
}).done(function(data){
alert("inside ajax");
//some coding
});
此脚本适用于localhost,但它不适用于外部站点。这是为什么?是因为网址是localhost吗?但我已经在外部网站上测试了一些其他localhost脚本并且它可以工作。例如,我已经插入了带有localhost URL http://127.0.0.1/css/sample.css
的CSS脚本,并将其放入外部站点并且CSS样式工作。
答案 0 :(得分:2)
阅读CORS http://www.w3.org/TR/cors/,http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
在发送任何输出之前的sites.php开头添加此
<?php
header('Access-Control-Allow-Origin: *');
?>
使用*
指定任何网站,因为它是一本书籍小册子。
答案 1 :(得分:1)
当您说“外部”网址时,您指的是此网页运行的网站以外的其他网站吗?如果是这样,我最初的想法是你遇到了使用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;
}
?>