PHP为JSONP返回application / octet-stream而不是javascript

时间:2014-01-14 12:31:57

标签: javascript php apache callback jsonp

我有以下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.comhttp://jsonip.com时,它会按预期返回IP值。

当我访问http://myserver.com/时,它会按预期显示({"ip":"123.123.123.123"});

但是,当我使用<script src="http://myserver.com/?callback=getip"> </script>时,它什么都不显示。

Chrome控制台对400 Bad Requestapplication/octet-streamhttp://myserver.com/?callback=getipapplication/javascripthttp://ip.jsontest.com/?callback=getiphttp://jsonip.appspot.com?callback=getiphttp://jsonip.com?callback=getip,所以我相信问题在于它没有返回正确类型的数据。

我已尝试禁用output_buffering并重新启动服务器(运行Apache的QNAP NAS),但它无法正常工作。

0 个答案:

没有答案