返回 JSON_CALLBACK 的角度 JSONP 未定义错误

Posted

技术标签:

【中文标题】返回 JSON_CALLBACK 的角度 JSONP 未定义错误【英文标题】:Angular JSONP returning JSON_CALLBACK is not defined error 【发布时间】: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 函数的代码。 【参考方案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!");

【讨论】:

以上是关于返回 JSON_CALLBACK 的角度 JSONP 未定义错误的主要内容,如果未能解决你的问题,请参考以下文章

如何发出 jsonp 请求

在对象的 json 数组中找到一个键值并返回另一个带有角度的键值

如何以角度将对象从服务返回到组件

在json文件中搜索关键角度2+

返回字典烧瓶和角度的字典

以角度解析来自 API 的 JSON 字符串