Can';你不能让JSONP从外部文件使用javascript吗?

Can';你不能让JSONP从外部文件使用javascript吗?,javascript,json,jsonp,Javascript,Json,Jsonp,我试图使用JSONP和标准javascript从另一台服务器上的外部文件访问一些JSON数据,但我无法让它工作。这是我正在使用的脚本,它位于与json文件不同的服务器上的HTML页面中。有人能帮忙吗 <script> function jsonCallback(data){ console.dir(data); }; var script = document.createElement('script'); script.src = 'http://

我试图使用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>

函数jsonCallback(数据){
console.dir(数据);
};
var script=document.createElement('script');
script.src=http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-2.json';
document.getElementsByTagName('head')[0].appendChild(脚本);
编辑
我有一个误解,我认为这个问题的URL是由提问者拥有的服务器托管的。让我谈谈我对他正在经历的问题的看法。因此,它在某些环境中工作,而在其他环境中不工作。我试图重现这个问题,结果得到“Reference:jsonCallback未定义”

我的测试环境使用Webpack将我的主脚本打包成一个包。这个包以iLife的方式模块化了我的主脚本。因此函数jsonCallback()被隐藏在全局范围之外,这就是我遇到引用问题的原因。另外,当我在JSFIDLE中测试它时,也遇到了同样的问题,它使用的是iframe(分离范围)。因此,为了清楚起见,我将主脚本直接放在index.html中,而不经过任何编译过程,它运行良好,并按预期调用了jsonCallback()

正如下面的一条评论所提到的,我们没有足够的信息来解决这个问题。但是我留下这个信息,希望它能帮助提问者


JSONP是一种非常方便的分配资源的方法,可以避免CORS策略问题。但是,在许多服务器框架中,它不是默认配置的

当我在拉威尔4.2上工作时,我也遇到了同样的问题。让我分享一下我在Laravel应用程序上所做的工作,这样你就可以了解如何修复服务器了

return Response::json('$response_body'); // Wrong
return Response::json('$response_body')->setCallback(Input::get('callback')); // Good

另外,如果您有进一步的问题,最好让我们知道您正在为您的服务器使用哪个框架。谢谢。

-我测试它时,它能工作。(投票结束:问题必须包含足够的信息来重现问题)。谢谢昆汀。是的,它在jsbin中工作。我想知道这是否与我的服务器有关。你知道我是如何访问json文件的各个数据的吗?比如站点名、域等?你会得到什么错误?问题中有一个URL。它返回JSONP。问题不在于服务器。如果你读了关于这个问题的评论,你会发现OP已经承认没有问题了。@Quentin你在哪里测试的?如果你在邮递员身上测试过,并假设它工作正常。你完全错了。在浏览器上测试它,你会看到一个JSON解析错误。“你在哪里测试的?”-我在对这个问题的评论中链接到了一个实时演示!“在浏览器上测试它,您将看到一个JSON解析错误”-JSONP不是JSON!如果您试图将其解析为JSON,它将不起作用。JSONP是一个包含javascript回调函数的字符串。它将被解析成javascript并被调用。通常是“jsonpCallback({…jsonObj})”。伙计,别紧张。这正是我上次遇到的问题。默认情况下,服务器框架不支持JSONP。如果他想允许JSONP请求到他的服务器,那么他需要在服务器端允许它。