微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Angular资源如何保持ajax头和同时启用cors

在我的ng资源文件中,我启用了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请求?

如果我的问题不清楚,请附上有关角和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.
如果您正在使用最新版本的angular.js,可以这样做

首先,添加xhr标题(你做的是正确的)

$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

然后在你的google地图搜索功能

var searchAddress = function(address) {
    var params = {address: address,sensor: false};
    //Note: google map rejects XHR header
    $http.get(google_map_web_api_url,{params: params,headers: {'X-Requested-With': undefined}})
        .success(function(data,status,headers,config) {
        })
        .error(function(data,config) {
        })
}

传入的头文件配置参数将会删除每个请求库的xhr,这意味着您的ng资源请求不会被修改

原文地址:https://www.jb51.cc/angularjs/142969.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐