发送HTML表单时,分别启动ajax函数和进程表单

时间:2015-12-11 17:15:25

标签: php html ajax forms

我在这里显示了一个HTML表单:

<form action="" method="post">
<div class="form-group">
 <textarea class="form-control" rows="3" cols="80" id="message" name="message" placeholder="Send a reply..."></textarea>
 <input type="hidden" id="conversation_id" name="conversation_id" value="<? echo $co_conversation_id; ?>">
 <input type="hidden" id="sarssystem" name="sarssystem" value="<? echo $sarssystem; ?>">
</div>
<div class="form-group" align="right">

<div class="btn-group" align="left" style="float:left">
  <button type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    <span class="glyphicon glyphicon-cog" aria-hidden="true"></span> <span class="caret"></span>
  </button>
  <ul class="dropdown-menu">
    <li><a href="messages.php?convoid=<? echo $co_conversation_id; ?>&del=check">Delete Conversation</a></li>
    <li><a href="#">Visit Profile</a></li>
    <li><a href="#">Report User</a></li>
    <li role="separator" class="divider"></li>
    <li><a href="#">Change Display Photo</a></li>
  </ul>
</div>

  <button type="reset" class="btn btn-default btn-sm">Cancel</button>
  <button type="submit" id="reply" name="reply" class="btn btn-primary btn-sm">Send Message</button>
</div>
</form>

这意味着在同一页面上启动此PHP脚本:

if(isset($_POST['reply'])){
    $user_id = $_SESSION['userid'];
    $message = $_POST['message'];
    $conversation_id = $_POST['conversation_id'];
    $sarssystem = $_POST['sarssystem'];

    if(isset($sarssystem)){
    if($sarssystem == 1){

$usr_message = str_replace("'","\\'",$message);

mysqli_query($conn,"INSERT INTO ap_messages (message_id, message, sender_id, time_sent, time_read, conversation_id) 
VALUES ('','$usr_message','$user_id', NOW(), NOW(), '$conversation_id')");

mysqli_query($conn, "UPDATE ap_conversations SET time = NOW() WHERE conversation_id = '$conversation_id'");

    } else {

        $reply = str_replace("'","\\'",$message); 


mysqli_query($conn,"INSERT INTO ap_messages (message_id, message, sender_id, time_sent, time_read, conversation_id) 
VALUES ('','$reply','$user_id', NOW(), '', '$conversation_id')");   

    mysqli_query($conn, "UPDATE ap_conversations SET time = NOW() WHERE conversation_id = '$conversation_id'");

    }
    } else {

        $reply = str_replace("'","\\'",$message); 


mysqli_query($conn,"INSERT INTO ap_messages (message_id, message, sender_id, time_sent, time_read, conversation_id) 
VALUES ('','$reply','$user_id', NOW(), '', '$conversation_id')");   

    mysqli_query($conn, "UPDATE ap_conversations SET time = NOW() WHERE conversation_id = '$conversation_id'");

    }
}

同时激活这个Ajax脚本:

<script type="text/javascript">
$(document).ready(function() {
    $('#reply').submit(function(){
        $.ajax({
        url: "system/sars_system.php",
        type: 'POST',
        data: {
            user_id: $('input[name="user_id"]').val(),
            message: $('input[name="message"]').val(),
            conversation_id: $('input[name="conversation_id"]').val(),
            sarssystem: $('input[name="sarssystem"]').val()
        },
        cache: false,
        success: function(responseText){
            $('#out').html(responseText);
        }
        });
        return false;
    });
});
</script>

在同一页面上稍微向下,然后应从单独的页面处理此PHP脚本:

require 'start.php';

    $user_id = $_SESSION['userid'];
    $message = $_POST['message'];
    $conversation_id = $_POST['conversation_id'];
    $sarssystem = $_POST['sarssystem'];

if($message == 'hello'){
    $sarsreply = 'hey, how are you?';
}

mysqli_query($conn,"INSERT INTO ap_messages (message_id, message, sender_id, time_sent, time_read, conversation_id) 
VALUES ('','$sarsreply','0', DATE_ADD( NOW(), INTERVAL 5 SECOND), '', '$conversation_id')");

mysqli_close($conn);

第一部分似乎适用于发布用户回复,虽然自动回复似乎没有添加到数据库,这让我相信脚本没有运行?我的Ajax或PHP有问题吗?

1 个答案:

答案 0 :(得分:1)

点击我认为你不能这样做。

您必须明白,当您点击“发送消息”时,事件优先级就是您的表单操作。所以你说你可以发布数据。

因此,您的点击事件不会因您所谓的ajax呼叫而触发。

在我看来,在这种情况下你能做的最好的事情就是尝试用ajax调用处理这两个事件。

将第一个处理插入的php脚本放在他自己的文件中,就像你对'system / sars_system.php'所做的那样。

对此文件进行ajax调用并将数据插入数据库。重要的是,如果成功发布了您将要执行的数据:

echo json_encode('success')

or (in this case)

echo 'success'

当您从服务器获得成功响应时,您将对'system / sars_system.php'进行第二次ajax调用

如果你发现这个解释不够清楚,那么这里有一个粗略的例子说明你如何做到这一点:

$(document).ready(function() {
    $('#reply').click(function(){
        $.ajax({
            url: '/path/to/file',
            type: 'POST',
            dataType: 'json',
            data: {param1: 'value1'},
        })
        .done(function() {

            $.ajax({
                url: '/path/to/file',
                type: 'POST',
                dataType: 'json',
                data: {param1: 'value1'},
            })
            .done(function() {
                console.log("success");
            })
            .fail(function() {
                console.log("error");
            })

        })
        .fail(function() {
            console.log("error");
        })
    });
 });

注意还有其他解决方案,但这将是您可以实施的。

我希望这能帮助你继续工作。