【问题标题】:$.post(url, data) doesn't work$.post(url, data) 不起作用
【发布时间】:2015-12-18 10:38:19
【问题描述】:

我正在使用 Rails 创建简单的 twitter_clone,以便在前端创建 json API 和 ReactJS。
我现在需要将新创建的推文保存到数据库中,然后更新 json 中的 API,其中包含推文列表,以便能够使用它们来呈现视图。
为了实现它,我尝试使用发布请求:

我在 main.jsx 文件中添加推文功能

addTweet(tweetToAdd){
    $.post("/tweets", { body: tweetToAdd })  //after saving to database
    .success( savedTweet => {
        let newTweetsList = this.state.tweetsList;
        newTweetsList.unshift(savedTweet);
        this.setState({tweetsList: newTweetsList}); 
    })
    .error(error => console.log(error));
}

将推文的正文传送到数据库时出现问题,因为提交后这里有NULL。
可能这意味着 body 没有发送到 DB ,但其余参数都有。

在 /tweets 中有一个 json API,如下所示:

[{"id":17,"user_id":1,"body":null,"created_at":"2015-12-18T10:11:25.085Z","updated_at":"2015-12-18T10:11:25.085Z","name":"Marek Czyż"}]

当我从控制台手动创建推文时,一切正常。所以问题一定出在前面的代码中。

在按下提交推文后,我收到了一条警告

警告:数组或迭代器中的每个孩子都应该有一个唯一的“key”道具。检查TweetList的渲染方法。请参阅fb.me/react-warning-keys 了解更多信息。

虽然我每条推文都有一把钥匙:

让 tweets = this.props.tweets.map(tweet => );

请帮帮我。

【问题讨论】:

  • 尝试记录tweetToAdd的值。是空的吗?如果不是,则您的控制器中可能不允许您的身体参数。您看到的警告与您呈现推文的方式有关。你也可以分享那个代码吗?

标签: json reactjs


【解决方案1】:

假设您将正确的值作为tweetToAdd 传递,请确保您的控制器中的permit body 参数。如果它在控制台中工作,则不是验证问题,而是未经许可的参数。

至于您看到的错误,您需要为每条呈现的推文添加一个 key 属性。比如:

render() {
  let tweets = this.props.tweets;
  return <ul>
    {tweets.map(tweet => {
      return <li key={tweet.id}>{tweet.body}</li>;
    })}
  </ul>;
}

【讨论】:

  • 是的,:body 的权限存在问题。谢谢!
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 2013-10-20
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多