使用angular v1.3.1我试图实现一个Facade,以便在Web应用程序的后端向REST + JSON接口发出http请求时,我遇到了一个单一的问题。
我在代码中得到了类似的内容:
findSomething(value: number): ng.IPromise<api.DrugIndication[]> {
const getParams = { 'param' : 'value' };
const config:ng.IRequestShortcutConfig = {
headers: {
"Content-Type" : "application/json"
},
data: getParams
}
return this.$http.get(url,config);
}
当有时间来调用它时,我得到了一个400 Bad Request(顺便说一下:一个乐队的好名字!),因为后端(用Scala制作)会立即拒绝请求。因此,在请求中进行检查时,我发现在请求/消息正文中没有发送任何数据。
那么我如何使用angular&#34; $ http.get&#34;发送一些数据和HTTP Get请求?
其他信息:如果我使用ubuntu shell中的curl命令发出make请求,则不会发生。所以Chrome和angular.js之间可能存在问题
答案 0 :(得分:1)
如果您检查chrome开发工具中的网络选项卡,您将看到这是一个飞行前OPTIONS请求(跨源资源共享(CORS))。
你有两种方法可以解决这个问题。
客户端(这要求您的服务器不需要application / json值)
服务器端
在您的服务器框架上设置类似这样的中间件:
if r.Method == "OPTIONS" {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "GET")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Authorization")
w.Header().Set("Access-Control-Max-Age", "86400") // firefox: max 24h, chrome 10min
return
}
对于您的特定框架,this应该正常工作
答案 1 :(得分:1)
使用config.data将在请求正文中发送数据,使用
config.params = getParams
这来自文档:
params - {Object。} - 将使用paramSerializer序列化并附加为GET参数的字符串或对象的映射