我有以下PHP代码
<?php
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
header('Content-Type: application/javascript');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Max-Age: 3628800');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
$data = array('ip'=>$ip);
echo $_GET['callback'] . '('.json_encode($data).');';
?>
以及以下Javascript代码
<script>
function getip(json) {
alert("It works!");
document.getElementById('ipaddr').value = json.ip;
}
//http://ip.jsontest.com/
</script>
<script src="http://myserver.com/?callback=getip"> </script>
当我在回调中使用http://ip.jsontest.com/
或http://jsonip.appspot.com
或http://jsonip.com
时,它会按预期返回IP值。
当我访问http://myserver.com/
时,它会按预期显示({"ip":"123.123.123.123"});
。
但是,当我使用<script src="http://myserver.com/?callback=getip"> </script>
时,它什么都不显示。
Chrome控制台对400 Bad Request
说application/octet-stream
和http://myserver.com/?callback=getip
,application/javascript
,http://ip.jsontest.com/?callback=getip
,http://jsonip.appspot.com?callback=getip
为http://jsonip.com?callback=getip
,所以我相信问题在于它没有返回正确类型的数据。
我已尝试禁用output_buffering
并重新启动服务器(运行Apache的QNAP NAS),但它无法正常工作。