返回JSON_CALLBACK的Angular JSONP未定义错误

时间:2014-07-21 20:44:29

标签: angularjs jsonp

我试图通过JSONP向下拉数据。我一直很疑惑为什么它在某些情况下不起作用。

我已经成功地提取了这个样本JSONP:

https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Brian

但是当在S3上复制到存储桶时,我不断收到此错误:

Uncaught ReferenceError: JSON_CALLBACK is not defined

该文件是公开的,我可以使用$.ajax访问它,但不能$http.jsonp

我尝试将json文件的MIME类型更改为以下所有内容:

  • 应用/ JSON
  • 应用/ JavaScript的
  • 应用程序/ x-JavaScript的
  • 文本/纯
  • 文本/ JavaScript的

他们都不允许我通过$http.jsonp函数

成功拨打电话

6 个答案:

答案 0 :(得分:8)

好的,所以这很奇怪,但我最终通过将JSONP中的回调包装器从JSON_CALLBACK(.......)更改为angular.callbacks._0来实现它,因为这是回调函数角度保持尝试调用而不是JSON_CALLBACK ......非常奇怪的行为。

答案 1 :(得分:1)

无法看到你的代码,我可以告诉你几天前使用JSONP和angular时对我有用的东西:

controller('YourCtrl', ['$scope', '$http', function($scope, $http) {
var url = "https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Brian"
$http.jsonp(url)
    .success(function(data) {
        $scope.greeting = data;
    });
}])

然后在视图中,这样的事情应该有效:

<div ng-controller="YourCtrl">
{{greeting.name}} <br />
{{greeting.salutation}}
</div>

如果这没有回答您的问题,请尝试粘贴您的代码。

答案 2 :(得分:0)

Brian我找到了一种方法来确保它检测到?callback=JSON_CALLBACK。当你请求url时,你可以用这种方式编写它,而不是将整个内容放入其中,它会检测到100%:

$http({
  method: 'JSONP',
  url: 'https://angularjs.org/greet.php' + '?callback=JSON_CALLBACK' + '&name=Brian"'
});

答案 3 :(得分:0)

问题出在你的Rest Answer或存储桶中的http json文件中,需要使用get(callback)参数动态显示。

您需要检测回调参数并连结到json以获取jsonp

例如:

1) http://example.com?callback=JSONP_CALLBACK
2) http://example.com?callback=OtherCallback
3) http://example.com?callback=JSONP_CALLBACK_OTHER

获取GET参数“回调”,并按照以下方式休息:

1) JSONP_CALLBACK({YOUR REST INFO})
2) OtherCallback({YOUR REST INFO})
3) JSONP_CALLBACK_OTHER({YOUR REST INFO}) 

答案 4 :(得分:0)

只需使用JSONP_CALLBACK代替JSON_CALLBACK

谢谢。

答案 5 :(得分:-1)

通过

更改服务器的响应
angular.callbacks._0 ({"name":"Super Hero","salutation":"Namaste","greeting":"Namaste Super Hero!"});

而不是

JSON_CALLBACK ({"name":"Super Hero","salutation":"Pryvitannie","greeting":"Pryvitannie Super Hero!"});