两个环境之间的奇怪错误-FormData错误和$http POST(AngularJS-RoR)
当我试图通过$http方法向服务器提交FormData对象时,我遇到了一个不一致的错误。当我在MACOSX上本地运行rails服务器时,会发送表单,但当我将代码推送到staging(ubuntu 14.04)或当我的同事(Xubuntu)尝试时,有效负载对象为空({})。以下是我的设置:两个环境之间的奇怪错误-FormData错误和$http POST(AngularJS-RoR),angularjs,form-data,Angularjs,Form Data,当我试图通过$http方法向服务器提交FormData对象时,我遇到了一个不一致的错误。当我在MACOSX上本地运行rails服务器时,会发送表单,但当我将代码推送到staging(ubuntu 14.04)或当我的同事(Xubuntu)尝试时,有效负载对象为空({})。以下是我的设置: return $http.post(url, parsed.form, self.$headers).then(function(res){ self.$parseResponse(res.data,
return $http.post(url, parsed.form, self.$headers).then(function(res){
self.$parseResponse(res.data, parsed.attrs);
return self;
});
其中parsed.form是一个FormData对象,其中填充了嵌套的json和文件附件
self.$headers = { headers:
{
'Content-Type': undefined,
'Accept': 'application/json',
'Content-Transfer-Encoding': 'utf-8',
transformRequest: angular.identity
}
};
已安装Bower软件包:
{
"angular": "1.2.28",
"angular-route": "1.2.28",
"angular-resource": "1.2.28",
"angular-bootstrap": "0.12.0",
"angular-activerecord": "latest",
"angular-devise": "latest",
"angular-mocks": "1.2.28",
"lodash": "latest"
}
如果你需要更多信息,请告诉我
更新:
我注意到这两个请求的标题有所不同:
更新2:我现在使用XMLHttpRequest,它似乎已经解决了这个问题,至少对于这个特定的表单,我需要用一个文件附件来测试它。所以我猜$http或我使用它的方式有问题。不确定,但我在Mac+Linux环境中看到的唯一问题是Mac文件名不区分大小写,而在Linux上它们区分大小写
您可能有一个未命中的文件名,它在Mac上运行正常,但在Linux上会中断。您可能希望强制内容类型形成数据:
self.$headers = { headers:
{
'Content-Type': 'Content-Type:multipart/form-data',
'Accept': 'application/json',
'Content-Transfer-Encoding': 'utf-8',
transformRequest: angular.identity
}
};
如果内容类型为纯文本,接收端将无法正确解析所有表单数据。如果不定义,http堆栈将设置默认值。这个默认值在操作系统之间似乎不一致。至少这是一个提示。我们没有资源来找出问题所在,所以我们现在只进行解决。在Linux服务器上跟踪错误日志。如果找不到文件,就会抛出错误。我想我已经试过了。我今天很忙,但我将尝试测试此解决方案。