错误:数据无效;无法通过JSON对象,数组或值

时间:2017-08-11 11:06:28

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

尝试向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}

有人可以帮我理解可能出现的问题吗?

1 个答案:

答案 0 :(得分:0)

<强>更新

根据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属性之后)。