【发布时间】:2015-09-24 15:49:22
【问题描述】:
在我的 ng-resource 文件中,我启用了 ajax 标头:
var app = angular.module('custom_resource', ['ngResource'])
app.config(['$httpProvider', function($httpProvider) {
//enable XMLHttpRequest, to indicate it's ajax request
//Note: this disables CORS
$httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
}])
app.factory('Article', ['$resource', function($resource) {
return $resource('/article/api/:articleId', {articleId: '@_id'}, {
update: {method: 'PUT'},
query: {method: 'GET', isArray: true}
})
}])
这样我就可以相应地分离 ajax 和非 ajax 请求和响应(发送 json 数据,如 res.json(data),或发送整个 html 页面,如 res.render('a.html')
例如,在我的错误处理程序中,我需要决定呈现 error.html 页面还是只发送错误消息:
exports.finalHandler = function(err, req, res, next) {
res.status(err.status || 500)
var errorMessage = helper.isProduction() ? '' : (err.message || 'unknown error')
if (req.xhr) {
res.json({message: errorMessage})
}
else {
res.render(dir.error + '/error_page.ejs')
}
}
但现在我需要向其他站点发出 CORS 请求。是否可以在保留 ajax 标头的同时进行 CORS 请求?或其他方式我可以识别来自服务器的 ajax 和非 ajax 请求?
如果我的问题不清楚,这里有一篇关于 Angular 和 CORS 的相关文章 http://better-inter.net/enabling-cors-in-angular-js/
基本上,我们需要删除 xhr 标头以启用其他服务器的 cors,但我需要自己的服务器的标头
编辑2:
今天我尝试集成谷歌地图,我得到了这个错误:
XMLHttpRequest cannot load http://maps.googleapis.com/maps/api/geocode/json?address=Singapore&sensor=false. Request header field X-Requested-With is not allowed by Access-Control-Allow-Headers.
【问题讨论】:
标签: ajax angularjs node.js express xmlhttprequest