【问题标题】:Firebase http put request in a for loopFirebase http 将请求放入 for 循环
【发布时间】:2016-08-12 20:48:01
【问题描述】:

我正在使用firebase的实时数据库并尝试在for循环中发送一个put请求,我的代码如下:

var httpput = function(articleIdlol, versionnumber){
  $http({
      method: "PUT",
        url: FirebaseUrl +articleIdlol+ "/versions/" +versionnumber+"/moment.json",
        data: document.getElementById("changeMoment").value
   });
}

$scope.changeMomentorSituation = function(articleId){
for (var x = 0; x < $scope.articlesData[articleId].versions.length; x++){
    httpput(articleId, x);
}
}

$scope.articlesData 包含从较早的 http get 请求到 firebase 数据库的 response.data。 articleId 是a2,我查过了。

我可以向您保证,数据库的链接是正确的。但是,当我运行代码时,我收到 400(错误请求)错误,这可能意味着我发送的数据格式不正确。

我相信我正在发送一个字符串,但为了确保我先将数据转换为一个字符串并发送它,但我得到了同样的错误。 'moment' 是一个对象中的一个键,它包含在一个名为 'versions' 的数组中。

这是 JSON 架构:

  "EditedArticles" : {
"a2" : {
  "versions" : [ {
    "answer" : "a2",
    "article_code" : "a2",
    "created_time" : "2016-08-12T01:20:14.300Z",
    "datatype" : "article",
    "hashtags" : [ "a2", "a2", "a2" ],
    "keyword" : "a2",
    "moment" : "a2",
    "question" : "a2",
    "seo" : {
      "description" : "a2",
      "og_title" : "a2",
      "title" : "a2"
    },
    "situation" : "a2",
    "title" : "a2",
    "version" : 1
  }
 }

我尝试发送 {moment: "xxx"} 但这在 moment(original) 中嵌套了另一个关键时刻,值为 "xxx"。这意味着,我可以使用较早的数据并在新对象中重新创建每个字段,并将其发送到 http put 请求中的数据字段中:

FirebaseUrl +articleIdlol+ "/versions/" +versionnumber.json

但是假设我的 URL 路径正确,我是否应该能够发送单个字符串来修改关键时刻的值?

【问题讨论】:

  • “错误可能意味着我发送的数据格式不正确”在控制台->网络选项卡中检查它
  • "无效数据;无法解析 JSON 对象、数组或值。您的键名中可能使用了无效字符。"就是我所看到的。但我检查了我发送的数据类型,它是一个字符串

标签: javascript json http firebase-realtime-database put


【解决方案1】:

事实证明,幸运且经过深思熟虑,Firebase 有一个名为 PATCH 的 http 请求,它完全符合我的要求。请参考:https://www.firebase.com/docs/rest/guide/saving-data.html

至于我的解决方案,这里是:

var httpput = function(articleIdlol, versionnumber){
  $http({
        url: FirebaseUrl +articleIdlol+ "/versions/" +versionnumber+".json",
        method: "PATCH",
        data: {"moment":document.getElementById("changeMoment").value}
   });
}

$scope.changeMomentorSituation = function(article){
for (var x = 0; x < $scope.articlesData[article].versions.length; x++){
    httpput(article, x);
}
}

请注意,如果我使用了前面提到的 PUT 请求,如果 URL 是

FirebaseUrl +articleIdlol+ "/versions/" +versionnumber+ ".json"

具有 12 个键的整个对象将替换为 {moment: "xxx"} 但如果您将其修改为 PATCH 方法请求,在 http 请求中具有相同的 URL 和数据字段,关键“时刻”用数据更新。真的。这就是全部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2020-05-09
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多