我有一个使用ajax的评论系统。
它通过php循环生成带注释的div和回复框,这意味着表单会一遍又一遍地重复。如何让var parent只从我提交的表单中获取数据?并非所有具有id parent的表单字段。
$(function () {
$('.reply').on('submit', function (e) {
$.ajax({
type: 'post',
url: '/app/reply',
data: $(this).serialize(),
success: function (data) {
var parent = $('#parent').val();
$("#comment_"+parent).append(data);
var form = document.getElementById("form_" + parent);
form.reset();
}
});
e.preventDefault();
});
});
<form action="" method="POST" class="reply" id="form_<?php echo $comment['id'] ?>">
<textarea id="textArea" name="comment"></textarea>
<input type="submit" name="upload_btn" value="Reply">
<input type="hidden" value="<?php echo $post ?>" name="post">
<input type="hidden" value="<?php echo $comment['id'] ?>" id ="parent" name="parent">
<input type="hidden" value="pop" name="location">
<input type="hidden" value="<?php echo $level ?>" name="level">
</form>
答案 0 :(得分:2)
首先从隐藏字段中删除id=parent
,然后您可以像这样访问;
<script>
$('.reply').on('submit', function (e) {
var that = this;
$.ajax({
type: 'post',
url: '',
data: $(this).serialize(),
success: function (data) {
var parent = $(that).find('input[name=parent]').val();
//your code
}
});
e.preventDefault();
});
</script>
答案 1 :(得分:0)
如果您使用AJAX传递数据:
...
type: 'post',
url: '/app/reply',
data: { 'x': '1973' },
success: function (data) {
...
然后你可以这样用PHP收集它:
$year = $_POST['x']; // will be set to the string '1973'
从这里你应该能够找到并解决你的问题。
答案 2 :(得分:0)
如果我正确理解您的问题,则问题出在var parent = $('#parent').val();
。此行始终返回调用范围$.ajax()
函数的相同值。
解决这个问题的安全方法可能是将您调用$.ajax()
函数的表单的id传递给它,然后使用此值进行查询。
这将是这样的:
$.ajax({
type: 'post',
url: '/app/reply',
_formId: this.id
data: $(this).serialize(),
success: function (data) {
var parent = $('#div_prefix'+this._formId).val(); //Now you have diferent parent for every form
...
}
});