【问题标题】:React fetch error when trying to send Id with input data尝试使用输入数据发送 Id 时反应获取错误
【发布时间】:2018-04-10 13:20:04
【问题描述】:

在尝试将数据发送到我的数据库时,我对 react fetch 有一点问题。

我有一份球队名单,我想将球员添加到某些球队。我正在尝试从用户输入中发送球员姓名和球员编号,以及他们将球员添加到的特定球队的球队 ID。这是我添加玩家的功能:

  addPlayers() {
    var pname = document.getElementById("playerName").value;
    var pnr = document.getElementById('pnr').value;
    var teamId = document.getElementById('teamId').value;
    console.log(pname + pnr + teamId);
    fetch("http://localhost:8080/api/addPlayer?name="+pname+"&number="+pnr+"&teamId="+teamId);
 }

如果我硬编码球员姓名和号码或硬编码球队 ID,这一切都有效。当尝试动态获取所有 3 个时,它不起作用。 console.log 仅返回团队 ID,并且在尝试将玩家添加到其他团队时也不会更新。

React 渲染部分:

  this.state.data.map((dynamicData, key) =>
              <div class="black">
              <PanelGroup accordion id="accordion">
                <Panel bsStyle="primary" eventKey="1">
                  <Panel.Heading>
                    <Panel.Title toggle>{dynamicData.name} <i class="fas fa-angle-down"></i></Panel.Title>
                  </Panel.Heading>
                  <Panel.Body collapsible>Add players</Panel.Body>
                  <Panel.Body collapsible>
                  <div id="dynamicInput">
                    <input type="hidden" class="bottomroom" id="teamId" value={dynamicData.id}></input>
                    <input type="text" class="bottomroom" placeholder="Player name" id="playerName"></input>
                    <input type="text" class="bottomroom" placeholder="Player number" id="pnr"></input>
                  </div>
                    <br></br>
                    <button type="submit" onClick={this.addPlayers} class="btn btn-success button"><i class="fas fa-check-circle"></i></button>
                  </Panel.Body>
                </Panel>
              </PanelGroup>

Here is a picture of what it looks like to give you a better understanding


错误:

"Bad Request"
message
:
"Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: """
path
:
"/api/addPlayer"
status
:
400
timestamp

【问题讨论】:

    标签: json reactjs api get fetch


    【解决方案1】:

    通过查看错误,很明显该字段存在类型不匹配。

    我会假设 number 字段是 int 类型,你可以尝试跟随,或者如果它是 int 类型的 teamid,只需为 teamid 执行此操作

    var pnr = parseInt(document.getElementById('pnr').value);
    

    告诉我们它是否有效。

    更新

    <input type="text" class="bottomroom" placeholder="Player name" id={"playerName"+key}></input>
    <input type="text" class="bottomroom" placeholder="Player number" id={"pnr"+key}></input>
    

    按钮

     <button type="submit" onClick={() => this.addPlayers(key)} class="btn btn-success button"><i class="fas fa-check-circle"></i></button>
    

    在函数中

       addPlayers(key) {
        var pname = document.getElementById("playerName").value;
         var pnr = parseInt(document.getElementById('pnr').value);
        var teamId = document.getElementById('teamId').value;
        console.log(pname + pnr + teamId);
        fetch("http://localhost:8080/api/addPlayer?name="+pname+"&number="+pnr+"&teamId="+teamId);
     }
    

    【讨论】:

    • 错误仍然存​​在,但控制台现在记录 NaN 和 teamID,而不是之前记录的 teamID。
    • 嗯,你控制台记录了所有变量吗? prn,teamid 的值是否正确?
    • 是的,这似乎就是问题所在。出于某种原因,只有 teamID 正在记录,玩家名称只是一个空日志,玩家编号是 NaN。我不确定这些会如何相互影响,就好像我只是从输入字段中删除了 teamID 然后玩家姓名和号码输入会正确记录。
    • 我认为这是因为 value 属性,只需尝试手动将 value 属性添加到 pnr 和 name 并设置一些值并尝试(不要输入任何内容,只需单击按钮)
    • 如果我将玩家名称设置为,例如 'eddie' 并将数字设置为 10,那么是的,它可以工作。由于某种原因,用户输入的数据在某处丢失了。
    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2016-01-03
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    相关资源
    最近更新 更多