为什么AngularJS在$httppost请求的数据对象末尾加冒号

Why does AngularJS add colon in the end of data object in $http post request

当尝试使用 angular js $http 向 post 请求 elasticSearch 时,我收到 "Unexpected token : " 错误。

我的代码如下所示:

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

这很奇怪。 关于如何消除尾随冒号的任何想法?

对于遇到这种行为的任何人,

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

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

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

在我们的例子中,http.post 缺少应该设置为“application/json”的 HTTP header“内容类型”,它是 posted.

如果您 posting json,只需添加

{headers:{'Content-Type': 'application/json'}}

作为 post 方法的第三个参数。原来如此

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