后续的JSONP请求给出404状态,尽管GET状态为200
Subsequent JSONP requests give status 404 despite GET status 200
因此,我能够使向yelp API发出的第一个JSONP请求为我返回业务数据,但是我发出的任何后续请求都会导致回调失败,并记录状态码404。然而,当我在Chrome开发工具中打开网络选项卡时,我看到我所做的所有后续GET请求都有状态200,并且我确实看到了有效的响应数据。当失败的回调函数被调用时,这怎么可能呢?我该如何解决这个问题?我希望能够不止一次地接收数据。
下面的问题代码是基于另一个问题Yelp API和AngularJS的答案,不同之处在于注释
下面的语句<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
<script src="oauth-signature.js"></script>
</head>
<body ng-app="plunker">
<div ng-controller="MainCtrl">
<p><date-input name="info.name" message="info.message"></date-input></p>
<ul>
<li data-ng-repeat="business in businesses">
{{business.name}}
</li>
</ul>
</div>
<script>
function randomString(length, chars) {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
return result;
}
var app = angular.module('plunker', []);
app.controller('MainCtrl', ['$scope', 'MyYelpAPI', function($scope, MyYelpAPI) {
$scope.businesses = [];
// first time for the callback gets executed
MyYelpAPI.retrieveYelp('', function(data) {
console.log('callback1');
console.log('data');
$scope.businesses = data.businesses;
});
// the second time for the callback doesn't get executed
MyYelpAPI.retrieveYelp('', function(data) {
console.log('callback2');
$scope.businesses = data.businesses;
});
}]).factory("MyYelpAPI", function($http) {
return {
"retrieveYelp": function(name, callback) {
var method = 'GET';
var url = 'http://api.yelp.com/v2/search';
var params = {
callback: 'angular.callbacks._0',
location: 'San+Francisco',
oauth_consumer_key: '',
oauth_token: '',
oauth_signature_method: "HMAC-SHA1",
oauth_timestamp: new Date().getTime(),
oauth_nonce: randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'),
term: 'food'
};
var consumerSecret = '',
var tokenSecret = '',
var signature = oauthSignature.generate(method, url, params, consumerSecret, tokenSecret, { encodeSignature: false});
params['oauth_signature'] = signature;
$http.jsonp(url, {params: params})
.success(callback)
// second time fails
// data -> undefined; status -> 404
.error(function(data, status) {
console.log(data, status); // why is this happening?
});
}
}
});
</script>
</body>
</html>
你应该这样做:
$http.jsonp("api.yelp.com/v2/search?callback=JSON_CALLBACK", yourParams)
.success(function() {
//success callback
})
.error(function(){
//error callback
}) ;
相关文章:
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 事件和状态
- 尽管链接成功并已成功下载,但未找到NPM模块
- 获取选择框的状态
- 相位器状态未捕获参考错误
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何使用密码检测网络中的状态连接
- Ember.js-接口状态应该存储在哪里
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 在Angular 2中布线期间保持零部件处于活动状态
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- XMLHttpRequest未返回值-状态202
- 使用javascript反复检查用户在facebook上的登录状态
- 如何使bxslider仅在移动视图中处于活动状态
- 获取ASP.NET Ajax Timer状态
- React redux初始化功能,无论状态变化如何
- 看到“;未捕获的类型错误:无法读取属性'weight'未定义的“;尽管按照字面上的指示
- 尽管成功传输了 json,但我的 Jquery.ajax 方法在响应中获得了错误状态
- 后续的JSONP请求给出404状态,尽管GET状态为200
- Redux状态没有更新,尽管所有数据都正确传递