【问题标题】:Angular JSONP returning JSON_CALLBACK is not defined error返回 JSON_CALLBACK 的角度 JSONP 未定义错误
【发布时间】:2014-09-12 12:09:47
【问题描述】:

我正在尝试通过带有角度的 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 函数成功调用

【问题讨论】:

  • "Uncaught ReferenceError: JSON_CALLBACK is not defined" — 您的问题是缺少默认 JSON_CALLBACK 函数的代码。

标签: angularjs jsonp


【解决方案1】:

好的,所以这很奇怪,但我最终通过将 JSONP 中的回调包装器从 JSON_CALLBACK(.......) 更改为 angular.callbacks._0 来让它工作,因为这是回调函数 angular 一直试图调用而不是 JSON_CALLBACK...非常奇怪的行为。

【讨论】:

  • 你使用的angular.js是什么版本的?
  • $http.jsonp 将自动将 url 中的 JSON_CALLBACK 替换为 angular.callbacks.{{callbackId}}。出于某种原因,在你的情况下它没有这样做。
  • 是的,非常奇怪的行为,但无论如何你救了我的命!
【解决方案2】:

看不到您的代码,我可以向您展示几天前在使用 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>

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

【讨论】:

  • 这正是我正在做的。
【解决方案3】:

Brian 我找到了一种方法来确保它检测到?callback=JSON_CALLBACK。当你请求url时,不用把整个东西放在里面,你可以这样写,它检测到100%:

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

【讨论】:

    【解决方案4】:

    问题出在您的 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}) 
    

    【讨论】:

      【解决方案5】:

      只需使用JSONP_CALLBACK 而不是JSON_CALLBACK

      谢谢。

      【讨论】:

        【解决方案6】:

        将您从服务器的响应更改为

        angular.callbacks._0 ({"name":"Super Hero","salutation":"Namaste","greeting":"Namaste Super Hero!"});
        

        而不是

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

        【讨论】:

          猜你喜欢
          • 2019-10-09
          • 2013-05-09
          • 2016-03-20
          • 1970-01-01
          • 2014-05-26
          • 2021-10-01
          • 2016-02-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多