我的ajax函数存在问题,只在我的foreach循环中提交第一个表单。
我有一个帖子/评论系统,每个帖子的每个评论都有一个个人ID。当我在没有ajax的情况下使用它时,评论会很好地提交并链接到正确的评论。当我用ajax尝试这个时,我只能设法获得循环中第一个表单的第一个ID来提交。
$value->id
是评论与之关联的帖子的ID。
以下是我的评论表格代码:
<form onsubmit="submitCmt(); return false;">
<div class="input-group">
<input style="border-radius: 0px; box-shadow:none; border-left: none; border-right:none;" class="form-control add-comment-input" placeholder="Add a comment..." type="text" id="postCmt">
<span class="input-group-btn">
<input type="hidden" id="post_id" value="<?= $value->id; ?>">
<input type="hidden" id="user_id" value="<?= $value->user_to; ?>">
<input type="hidden" id="logged_in_id" value="<?= $logged_in_id; ?>">
<button id="cmtBtn" class="btn btn-default" style="border-radius: 0px; box-shadow:none; border-right:none;">Post</button>
</span>
</div><!-- /input-group -->
</form>
以下是我的Ajax功能:
function submitCmt() {
var postCmt = _('postCmt').value;
var post_id = _('post_id').value;
var user_id = _('user_id').value;
var logged_in_id = _('logged_in_id').value;
_("cmtBtn").innerHTML = "<i class='fa fa-spinner fa-spin fa-fw'></i>";
var ajax = ajaxObj("POST", "process.php");
ajax.onreadystatechange = function() {
if (ajaxReturn(ajax) == true) {
_("cmtBtn").innerHTML = ajax.responseText;
}
}
ajax.send('postCmt='+ postCmt + '&post_id='+post_id + '&user_id=' + user_id + '&logged_in_id='+ logged_in_id);
}
我是使用Ajax的新手。我查看了类似的帖子,但很难有效地将它应用到我的代码中。
提前致谢!萨姆
答案 0 :(得分:0)
如果我理解正确,你在同一页面上有几个这样的表格,这意味着你有这几次,每种形式一次:
<input type="hidden" id="user_id" value="<?= $value->user_to; ?>">
这会创建许多名为user_id
的重复ID的字段,这是不允许的,因为每个ID都必须是唯一的。
您也不会以任何方式选择所需的表单,因此无法确定_('post_id').value
之类的返回值。可能是第一个或可能是其他东西。
要解决此问题,您只需向其添加表单ID,以便它们是唯一的:
<input type="hidden" id="user-<?= $value->post_id; ?>" value="<?= $value->user_to; ?>">
或者为每个表单指定一个id,并将这些输入字段ID更改为名称:
<form id="form-<?= $value->post_id; ?>" onsubmit="submitCmt(); return false;">
...
<input type="hidden" name="user_id" value="<?= $value->user_to; ?>">
然后,您需要更改选择器以选择具有给定ID的表单,然后使用给定名称在其中输入字段。 (我不知道这个的语法,因为我不知道你在这里使用的是哪个库。)