Javascript 为什么AngularJS在$http post请求的数据对象末尾添加冒号

Javascript 为什么AngularJS在$http post请求的数据对象末尾添加冒号,javascript,angularjs,http,post,form-data,Javascript,Angularjs,Http,Post,Form Data,当尝试使用angular js$http向elasticSearch发布请求时,我得到一个“意外令牌:”错误 我的代码如下所示: var request= $http({ method: "post", url: path, accept:"*/*", headers:{"Content-Type" : "application/x-www-form-urlencoded; charset: UTF-8"}, data:{ "query"

当尝试使用angular js$http向elasticSearch发布请求时,我得到一个“意外令牌:”错误

我的代码如下所示:

var request= $http({
    method: "post",
    url: path,
    accept:"*/*",
    headers:{"Content-Type" : "application/x-www-form-urlencoded; charset: UTF-8"},
    data:{
         "query":{
               "fuzzy":{
                    "title":{
                        "value": $scope.searchTerm,
                        "fuzziness":"1"
                    }
                }
        },
        "highlight":{
            "fields":{
                "*":{}
            }
        }
   }
});
在chrome控制台上查看表单数据部分时,我看到了带有尾随冒号的json

[{"query":{"fuzzy":{"title":{"value": $scope.searchTerm,"fuzziness":"1"}}},
"highlight":{"fields":{"*":{}}}}]:    <--- this is the problem
[{“查询”:{“模糊”:{“标题”:{“值”:$scope.searchTerm,“模糊性”:“1”}},

“突出显示”:{“字段”:{“*”:{}}]:对于遇到这种行为的任何人

在我的例子中,这是因为我用错误的JSON结构索引了一个文档。 当将批量索引选项与elasticSearch一起使用时,具有无效结构的JSON将在没有警告的情况下被索引

错误实际上在响应中,而不是在http请求上


尝试对文档重新编制索引,这可能会解决此问题。

在我们的示例中,http.post缺少应设置为“application/json”的http头“content type”,而实际上是发布的

如果您发布json,只需添加

{headers:{'Content-Type': 'application/json'}}
作为post方法的第三个参数。的确如此

$http.post( endpoint, json_payload, {headers:{'Content-Type': 'application/json'}} )

您是否使用AdvancedRESTClient或postman检查过发布的数据是否有尾随冒号?我非常确信Angular不会错误地附加这样的内容。但是看看代码,我认为问题可能出在其他地方。你真的想把它标记为通过标题编码的表单吗?如果您需要对表单进行编码,则需要跳过更多的环。看这个。是的,我与另一个rest客户端进行了检查,collon没有apear。Kyle,我在没有标题的情况下尝试过,没有帮助。您是否尝试过更明确地将对象构建为请求之外的对象?也许是在一个函数的作用域上,或者只是作为一个测试?var do=新对象();do.query.fuzzy.title.value=$scope.searchTerm;do.query.fuzzy.title.fuzziness=“1”;等等,等等?这将是一个很好的测试,以确定问题是否在于如何构造对象,而不是angular如何处理它。