我有一个应用程序是用PhoneGap + AngularJS (客户端)-- ExpressJS + MongoDB (服务器)构建的。该应用程序是托管在亚马逊EC2上的Ubuntu机器上。应用程序运行得很好,直到.
在EC2机器上,我做了一个:
sudo apt-get update在我这样做后,我开始在我的应用程序中获得交叉原产地共享错误(查看Chrome中的控制台)。在我的AngularJS应用程序中,我有类似于抛出错误的代码:
$http.get('http://amazon.ec2.foo/offers').success(function(data) { });错误是:
XMLHttprequest doesn’t allow Cross-Origin Resource Sharing on http://localhost:8000因此,我更新了服务器应用程序如下:
app.all("/api/*", function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
res.header("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS");
return next();
});这在一开始似乎很好-我停止了获得交叉原产地错误,我可以看到响应从http请求在控制台。然而,我的应用程序会停止响应,似乎在将响应打印到控制台后立即挂起--我无法单击网页的任何部分,或打开开发人员控制台等。唯一的方法是关闭选项卡并重新打开它。Chrome的其他标签都很好。
在调试了一段时间之后,我发现(没有那些应用程序头)之前,我从服务器上得到了一个HTTP 200,但是现在我得到了一个HTTP 304 (而不是修改的),这似乎是一个错误。
我发现,在标签上等待大约2分钟会导致网页加载它从http请求收到的数据,但是网页仍然没有响应。
我已经确认了一些事情,可以将其缩小到AngularJS,在HTTP304上执行一些奇怪的操作:
以前有人见过这个吗?你知道问题可能是什么吗?我怎么能解决这个问题?
谢谢!
发布于 2014-02-13 12:28:52
角将304状态代码视为失败,以捕获304 (未经测试):
var prom = $http.get('http://amazon.ec2.foo/offers')
.catch(function(resp){
if(resp.status !== 304){ $q.reject(resp) }
return resp; // response
})
.catch(function(err){
// handle or throw error
});
// Success responses and 304 responses are now available through the $http promise
prom.then( function(resp){ /* handle 200 and 304 response */ } );https://stackoverflow.com/questions/19802920
复制相似问题