Ajax只在foreach循环中提交第一个表单

时间:2016-08-06 10:14:43

标签: javascript php ajax forms

我的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的新手。我查看了类似的帖子,但很难有效地将它应用到我的代码中。

提前致谢!萨姆

1 个答案:

答案 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的表单,然后使用给定名称在其中输入字段。 (我不知道这个的语法,因为我不知道你在这里使用的是哪个库。)

相关问题