2017-08-11 16 views
0

我在尝试向POST请求或PUT请求发送Firebase RESTful API时遇到问题... 要提出请求,我使用的是Valve的Panorama JavaScript,其执行由Google处理V8发动机。错误:无效数据;无法传递JSON对象,数组或值

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} 

有人能帮我理解可能是什么问题吗?

+0

你有什么错误? console.log(err)? – qiAlex

+0

可能是你可以尝试只记录'数据'而不是'JSON.stringify' – Rahul

回答

0

更新

根据this piece of code

你必须包装你的对象在​​属性:

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属性例如后)。

+0

两者都试过, contentType不解决 JSON.stringify数据,导致全景错误,说:! (s2r://panorama/scripts/custom_game/heroselect.vjs_c,line:9,col:2) - AsyncWebRequest设置的数据值必须是具有已命名的key-> value请求params的对象(如果已设置) –

+0

@dragonblade同样的错误消息两种情况? – splattne

+0

如果我将数据字符串化,它会导致全景错误,它需要是一个具有命名键 - >值的对象 –