无法让JSONP与外部文件中的javascript一起使用?

时间:2018-02-06 15:49:48

标签: javascript json jsonp

我正在尝试使用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>

1 个答案:

答案 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

此外,如果您有其他问题,最好告诉我们您的服务器使用哪个框架。感谢。