Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个环境之间的奇怪错误-FormData错误和$http POST(AngularJS-RoR)_Angularjs_Form Data - Fatal编程技术网

两个环境之间的奇怪错误-FormData错误和$http POST(AngularJS-RoR)

两个环境之间的奇怪错误-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,

当我试图通过$http方法向服务器提交FormData对象时,我遇到了一个不一致的错误。当我在MACOSX上本地运行rails服务器时,会发送表单,但当我将代码推送到staging(ubuntu 14.04)或当我的同事(Xubuntu)尝试时,有效负载对象为空({})。以下是我的设置:

 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"
}
如果你需要更多信息,请告诉我

更新:

我注意到这两个请求的标题有所不同:

  • 失败的请求:内容类型:text/plain;字符集=UTF-8
  • 下一个:内容类型:多部分/表单数据

  • 更新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服务器上跟踪错误日志。如果找不到文件,就会抛出错误。我想我已经试过了。我今天很忙,但我将尝试测试此解决方案。