返回 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 未定义错误的主要内容,如果未能解决你的问题,请参考以下文章