我正在尝试使用JSONP和标准javascript从不同服务器上的外部文件访问某些JSON数据,但我无法让它工作。这是我正在使用的脚本,它位于与json文件不同的服务器上的HTML页面中。有人可以帮忙吗?
<script>
function jsonCallback(data){
console.dir(data);
};
var script = document.createElement('script');
script.src = 'http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-2.json';
document.getElementsByTagName('head')[0].appendChild(script);
</script>
答案 0 :(得分:-1)
修改强>
我误以为我认为问题上的URL是由提问者拥有的服务器托管的。让我谈谈他正在经历的问题。所以它在某些环境中工作,而不在其他环境中工作。我试图重现这个问题,我得到了“参考:jsonCallback没有定义。”
我的测试环境是使用Webpack从我的主脚本中创建一个包。而那个捆绑包是以IIFE方式模块化我的主要脚本。所以函数jsonCallback()被隐藏在全局范围之外,这就是我得到引用问题的原因。另外,当我在jsfiddle中测试它时,我遇到了同样的问题,这是使用iframe(分隔范围)。所以要清楚,我将主脚本直接放在我的index.html中,而不通过任何编译过程,并且它运行良好,并且按预期调用了jsonCallback()。
正如下面提到的评论之一,我们没有足够的信息来解决它。但是我要留下这些信息,希望能有机会帮助提问者。
JSONP是一种非常方便的资源分配方式,可以避免CORS策略问题。但是,在许多服务器框架中默认配置 NOT 。
当我在Laravel 4.2工作时,我遇到了同样的问题。让我分享一下我在Laravel应用程序上所做的工作,以便您可以了解如何修复服务器。
return Response::json('$response_body'); // Wrong
return Response::json('$response_body')->setCallback(Input::get('callback')); // Good
此外,如果您有其他问题,最好告诉我们您的服务器使用哪个框架。感谢。