Vil*_*lly 14 ajax post callback reactjs
我目前正在学习React.js,并且无法使用jquery或ajax调用将表单中的信息返回给帖子.基本上什么信息都在表单中,提交后,在数据中发布一个数据
标签.
这是我的代码:
var BasicInputBox = React.createClass({
render: function() {
return (
<div>
<label>{this.props.label}</label>
<br/>
<input type="text" onChange={this.props.valChange} value={ this.props.val} />
<br/>
</div>
);
}
});
var CommentBox = React.createClass({
render: function() {
return (
<div>
<label>Have a question?</label>
<br/>
<textarea type="text" onChange={this.props.valChange} value={ this.props.val} />
<br/>
</div>
);
}
});
var SubmitButton = React.createClass({
render: function() {
return (
<div>
<button type="submit" onClick={this.props.submit}>
Submit
</button>
</div>
);
}
});
var Contact = React.createClass({
getInitialState: function() {
return {}
},
submit: function(e) {
e.preventDefault()
console.log(this.state);
this.setState({
name: "",
email: "",
comment: ""
})
},
nameChange: function(e) {
this.setState({
name: e.target.value
})
},
emailChange: function(e) {
this.setState({
email: e.target.value
})
},
commentChange: function(e) {
this.setState({
comment: e.target.value
})
},
render: function() {
return (
<form>
<BasicInputBox label="Name:" valChange={this.nameChange} val={this.state.name}/>
<BasicInputBox label="Email:" valChange={this.emailChange} val={this.state.email}/>
<CommentBox valChange={this.commentChange} val={this.state.comment}/>
<SubmitButton submit={this.submit}/>
</form>
);
}
});
React.render(
<Contact></Contact>,
document.body
);
Run Code Online (Sandbox Code Playgroud)
fra*_*ure 22
正如@BinaryMuse所指出的那样,问题是你的提交方法并没有真正做任何提交.你提到你想要这样做的方式是通过AJAX,因此你需要1)在你的页面上包含jQuery(或Zepto),以及2)进行ajax调用.以下是完成第二部分的一种方法:
1)首先,您实际上不需要提交submit方法作为提交按钮的属性.当在表单内单击提交按钮时,它将触发表单的onSubmit事件,因此您可以在this.submit
那里简单地附加方法.
此外,您真的不需要我不想为Submit按钮创建单独的组件.这种粒度可能在这里不合理,因为你可以用更少的代码行完成同样的事情.因此,我将删除您的SubmitButton组件并将您的Contact组件呈现功能更新为:
render: function(){
return (
<form onSubmit={this.submit}>
<BasicInputBox label="Name:" valChange={this.nameChange} val={this.state.name}/>
<BasicInputBox label="Email:" valChange={this.emailChange} val={this.state.email}/>
<CommentBox valChange={this.commentChange} val={this.state.comment}/>
<button type="submit">Submit</button>
</form>
);
}
Run Code Online (Sandbox Code Playgroud)
2)接下来,您可以通过这种方式更改提交方法,添加AJAX调用.根据您发送表单的服务器/ API的详细信息,您可能需要稍微修改一下AJAX调用,但我在此处提供的是一个相当通用的表单,很有可能工作:
submit: function (e){
var self
e.preventDefault()
self = this
console.log(this.state);
var data = {
name: this.state.name,
email: this.state.email,
comment: this.state.comment
}
// Submit form via jQuery/AJAX
$.ajax({
type: 'POST',
url: '/some/url',
data: data
})
.done(function(data) {
self.clearForm()
})
.fail(function(jqXhr) {
console.log('failed to register');
});
}
Run Code Online (Sandbox Code Playgroud)
注意:我还封装了之前用于在其自己的函数中清除表单的代码,如果AJAX调用返回成功则调用该代码.
我希望这有帮助.我把代码放在jsFiddle中你可以测试一下:https://jsfiddle.net/69z2wepo/9888/
归档时间: |
|
查看次数: |
36971 次 |
最近记录: |