3

我对 HTML 和 JavaScript 比较陌生,我目前正在修改一家公司 osTicket。

我试图通过使用 JavaScript 延迟第二次提交来在同一页面中提交 2 个表单(我知道 HTML 不支持这一点),但我认为我的代码或思维方式有问题。

这是代码:

<script type="text/javascript">
    function x() {
        setTimeout(function() {
            <?php // Just normal validation, checking if has administrator privileges or not
            if(!defined('OSTSCPINC') || !$thisstaff || !$thisstaff->canEditTickets() || !$ticket) die('Access Denied');

            $info=Format::htmlchars(($errors && $_POST)?$_POST:$ticket->getUpdateInfo());
            if ($_POST)
                $info['duedate'] = Format::date($cfg->getDateFormat(),
                strtotime($info['duedate']));

            echo '<form id="reply" action="tickets.php?id=' . $ticket->getId() . '#reply" name="reply1" method="post" enctype="multipart/form-data">';
            csrf_token();

            echo '<input type="hidden" name="do" value="update">'; // Fields that are mandatory for the form but don't want them to show
            echo '<input type="hidden" name="a" value="edit">';
            echo '<input type="hidden" name="id" value="' . $ticket->getId() . '">';
            echo '<input type="hidden" name="user_id" id="user_id" value="' . $info['user_id'] . '">';
            echo '<input type="hidden" name="source" value="' . $info['source'] . '">';
            echo '<input type="hidden" name="topicId" value="' . $info['topicId'] . '">';
            echo '<input type="hidden" name="slaId" value="' . $info['slaId']  . '">';
            echo '</form>';?>
            document.forms['reply1'].submit(); // The second form
        }, 2000);
    }
</script>

<form id="reply" action="tickets.php?id=<?php echo $ticket->getId();?>#reply" name="reply" method="post" enctype="multipart/form-data">
    <!-- a lot of code that it is working properly -->

    <input class="btn_sm" type='submit' value="<?php echo __('Post Reply');?>" onclick="x()">
</form>

PHP中的第一个if只是为了防止普通用户提交此表单,我以管理权限登录。所有的 HTML 和 PHP 都是已经编写好的代码,应该可以正常工作(语法错误除外),我还通过单独提交每个表单进行测试,并按预期工作。

此外,第一个表单正常提交,没有错误,但第二个表单似乎没有被执行。我愿意改进代码并提出建议,谢谢!

4

1 回答 1

1

在 jQuery 中

$('form').submit(function(e){ // on a form submit
    e.preventDefault(); //do not submit
    serializedData = $("form").serialize(); //serialise all forms to JSON
    $.ajax({
        type: "POST",
        url: tickets.php,
        data: serializedData,
        success: function(){
            // do on success
        },
        dataType: json
    });
});

没有:

var request = new XMLHttpRequest();
request.open('POST', 'tickets.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
var forms = document.getElementsByTagName('form');
var data = JSON.stringify([].slice.call(forms));
request.send(data);
于 2016-01-15T11:16:14.793 回答