Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的补丁请求是';谁的回答是空的?(Javascript)_Javascript_Ruby On Rails_Ajax_Api_Patch - Fatal编程技术网

为什么我的补丁请求是';谁的回答是空的?(Javascript)

为什么我的补丁请求是';谁的回答是空的?(Javascript),javascript,ruby-on-rails,ajax,api,patch,Javascript,Ruby On Rails,Ajax,Api,Patch,我有一个在后端运行Rails的应用程序,Javascript前端。我的控制器、路线和CORS都很好。我的Post和Get请求工作正常。但是,当我发出修补请求时,它成功地进行了修补,但作为response.text(),我得到了空字符串。因此,当我使用response.json()时,它会给我Uncaught(承诺中)语法错误:在游戏中json输入的意外结束。js:25错误。我需要知道问题的根源 静态补丁游戏(){ const numberOfClicks=parseInt(document.ge

我有一个在后端运行Rails的应用程序,Javascript前端。我的控制器、路线和CORS都很好。我的Post和Get请求工作正常。但是,当我发出修补请求时,它成功地进行了修补,但作为
response.text()
,我得到了空字符串。因此,当我使用
response.json()
时,它会给我
Uncaught(承诺中)语法错误:在游戏中json输入的意外结束。js:25错误。
我需要知道问题的根源

静态补丁游戏(){
const numberOfClicks=parseInt(document.getElementById('click-number')。textContent,10)
const score=parseInt(document.getElementById('score').textContent,10)
const gameID=document.getElementById('gameID')。值
const gameObj={game:{click_number:numberOfClicks,score:score}
常量选项={
方法:“补丁”,
标题:{“内容类型”:“应用程序/json”,
“接受”:“应用程序/json”},
正文:JSON.stringify(gameObj)
}
取回(`http://localhost:3000/games/${gameID}`,选项)。然后(resp=>{debugger})。然后(game=>{debugger})//永远不会点击最后一个调试器
}
这些是我得到的resp调试器值

>resp
响应文本()
resp.json()
各自机构

看起来好像有一个
204
响应,这是我从成功的
补丁
中所期望的,这意味着服务器不会返回任何内容。这当然可以解释你在这方面遇到的问题

基本上,我不希望能够对缺少的内容调用
.text()
或更具体地说
.json()


理想情况下,
PUT
PATCH
请求不会返回数据<代码>200是可以接受的,但我诚实地认为
204
s是最合适的

注意:我看错了问题,只看了调试器值,没有完全阅读问题。这是问题的正确答案:。我会留下这个答案,以防其他人也有这个问题

原始答案

失败的代码不在提供的代码中

这是由于多次使用
.json()
造成的,并且(我假设)位于第二个
.then()
调用中

请修改您的代码,并确保每个请求只调用一次
.json()
,因为
.json()
会消耗生成的正文

您可以通过使用
.bodyUsed
变量来监控主体是否已被消耗,该变量可在任何
获取
响应中使用

这是基于您自己的调试器日志的解释:

>resp
resp.json()

你能显示出响应体的确切含义吗?试着把响应对象打印到控制台上,看看我们在处理什么
.then(resp=>console.log(resp)
Hey–您可以显示此路由的相应控制器操作吗?(以及与返回关注点或libs中的数据对象相关的任何逻辑)@Joel_Blum,我用更多信息更新了问题。感谢大家的帮助。您可以看到错误消息指定
体流已经读取
,这表示他正在使用
.json()
.text()
多次如果失败的代码不是这里发布的代码,那么在这种情况下你可能是对的。但是,我倾向于认为真正的问题源于这样一个事实,即第一次访问没有JSON响应place@gear4它说“已读”,因为响应主体是空的,所以没有任何东西可以转换为javascript object.这不是这段代码中的问题。如果没有内容,那么JSON错误将是
“JSON输入的意外结束”
这是一段CAN,它应该显示这两条错误消息(这是对一个端点的删除,该端点返回一个204,没有内容:
fetch(“https://reqres.in/api/users/2,{method:“DELETE”}。然后(data=>{data.json();data.json()})
查看响应,它是一个
204
no?可能是错误的,我不知道相应的控制器操作是什么样子的,但它看起来像是一个没有内容的情况。非常感谢。你是对的。缺少的部分是我的GamesController#update method
json render:game
缺少的部分,这对于此事件至关重要@murat ogulcan sahin很高兴我的回答为您指明了正确的方向。不过,我认为您应该将Damilare的问题标记为答案,因为它比我的答案更好地回答了最初的问题。