【问题标题】:Error: Invalid data; couldn't passe JSON object, array, or value错误:无效数据;无法传递 JSON 对象、数组或值
【发布时间】:2017-08-11 11:06:28
【问题描述】:

我在尝试向 Firebase RESTful API 发出 POST 或 PUT 请求时遇到问题... 为了发出请求,我使用了 Valve 的全景 JavaScript,其执行由 Google V8 引擎处理。

GET 请求(正常工作)如下所示:

$.AsyncWebRequest("https://<project>.firebaseio.com/-KrFV19WfaC7tfY6qys6.json",
        {
            type: "GET",
            complete: function (data){
                $.Msg("WOW: " + JSON.stringify(data));
            },
            error: function (err){
                $.Msg("Error: " + JSON.stringify(err));
            },
        });

我得到了回应:

WOW: {"statusText":"success","responseText":"{\"a\":\"1\"}\u0000","status":200}

但是当我尝试执行 PUT 或 POST 请求时,代码如下所示:

$.AsyncWebRequest("https://<project>.firebaseio.com/game.json",
        {
            type: "POST",
            data: {"A":"B"},
            success: function (data){
                $.Msg("WOW: " + JSON.stringify(data));
            },
            error: function (err){
                $.Msg("Error: " + JSON.stringify(err));
            },
        });

我得到下一个回复:

Error: {"statusText":"error",
        "responseText":"{\n  \"error\" : \"Invalid data; couldn't parse JSON object, array, or value.\"\n}\n\u0000",
        "status":400}

有人可以帮助我了解可能是什么问题吗?

【问题讨论】:

  • 你有什么错误? console.log (err) ?
  • 也许你可以尝试只记录data 而不是JSON.stringify

标签: javascript json firebase firebase-realtime-database restful-url


【解决方案1】:

更新

根据this piece of code

您必须将对象包装在 payload 属性中:

data: {payload: JSON.stringify({ "A": "B" })},

必须尝试在您的请求数据对象周围使用JSON.stringify()

喜欢:

$.AsyncWebRequest("https://<project>.firebaseio.com/game.json",
    {
        type: "POST",
        data: JSON.stringify({"A":"B"}),
        success: function (data){
            $.Msg("WOW: " + JSON.stringify(data));
        },
        error: function (err){
            $.Msg("Error: " + JSON.stringify(err));
        },
    });

另外,AsyncWebRequest 中是否有 contentType 属性?

所以也许你必须添加

contentType: "application/json; charset=utf-8",

到请求对象(例如在type 属性之后)。

【讨论】:

  • 两者都试过了,contentType 无法解析数据中的 JSON.stringify,导致全景错误,说:!! (s2r://panorama/scripts/custom_game/heroselect.vjs_c, line:9, col:2) - AsyncWebRequest 设置的数据值必须是具有命名键的对象->如果设置了值请求参数
  • 如果我对数据进行字符串化,会导致全景错误,它需要是一个名为 key->value 的对象
  • 当你尝试使用 jQuery 时会发生什么 - $.ajax(...) 就像这个例子中的 stackoverflow.com/questions/30800923/…
  • 遗憾的是 $ 不是纯 jQuery 或者根本不是 jQuary,所以没有 ajax,只是一个模仿,因为它只有 16 个函数:developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Panorama/…
  • 这是page 的唯一文档AsyncWebRequest
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多