我正在使用$ajax
将注释PUT放入我的react应用程序中的数据库中。评论从textarea中保存没有问题,并在我的应用程序中呈现 - 但没有换行符。
根据此帖子https://github.com/ssorallen/turbo-react/issues/22,有意识地删除换行符。在前端有这种方法吗?
我尝试了几种不同的方法(其中大部分都是这个方法的ReactJS - multiline textarea版):用\n
替换\\\n
;用\n
替换br
(不仅不起作用,而且因为html br元素在textarea中呈现也很丑陋);在PUT上使用encodeURI
,在decodeURI
上使用GET
。这些尝试的解决方案导致我的API PUT请求出错,因为它无法保存编码URI中的特殊字符,并且来自\\\n
的反斜杠被视为正斜杠,从而导致API调用得到错误的搜索路径(如api/comment/12312/Thisisa/nComment
)。
组件非常庞大,但这是textarea渲染部分:
var resourceInputValue = this.state.resourceValue;
var commentInputValue = this.state.commentValue;
(...)
<div className="detailsForms">
<form>
<textarea type="text" name="comment" className="commentForm" placeholder="Comment" defaultValue={commentInputValue} onChange={this.changeComment}/><img src="img/cancel.png" className="clearComment" onClick={this.clearComment}/>
</form>
<div className="formButtonDiv">
<button className="formButton" type="button" onClick={this.putComment}>Add Comment</button>
</div>
</div>
方法:
getInitialState: function(){
return {
commentValue: this.props.orderProps.comment
}
},
changeComment: function(event){
this.setState({
commentValue: event.target.value
});
if(event.target.value === "") {
this.setState({
commentValue: null
});
}
},
putComment: function(){
$.ajax({
type: "PUT",
url: apiUrl + 'api/OrderComment/' + this.state.detailsId + "/" + this.state.commmentValue,
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", 'Bearer ' + token);
},
success: function () {
document.getElementsByClassName("formButton")[1].className += " formButtonSuccess";
document.getElementsByClassName("formButton")[1].innerHTML = "Done!";
clearInterval(timer);
ajaxCallOrders();
},
done: function(){
}
}).fail(function (_d) {
document.getElementsByClassName("formButton")[1].className += " formButtonFail";
document.getElementsByClassName("formButton")[1].innerHTML = "Try again";
});
},