PHP Ajax 表单提交 .什么也没发生


php ajax form submit ..nothing happens

我有一个PHP Ajax表单,我正在尝试提交一个Zendesk API调用。每当我使用 ajax 部分时,为了让用户保持在同一页面上,它不起作用。当我删除<script>部分时,它工作正常,但显然从contact.html重定向到contact.php,所以我认为问题出在 Ajax 部分,而不是 PHP 部分。

这是我的HTML表单:

<html>
        <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
        </head>
        <body>
        <div class="box_form">
        <form id="zFormer" method="POST" action="contact.php" name="former">
        <p>
        Your Name:<input type="text" value="James Duh" name="z_name">
        </p>
        <p>
        Your Email Address: <input type="text" value="duh@domain.com" name="z_requester">
        </p>
        <p>
        Subject: <input type="text" value="My Subject Here" name="z_subject">
        </p>
        <p>
        Description: <textarea name="z_description">My Description Here</textarea>
        </p>
        <p>
        <input type="submit" value="submit" id="submitter" name="submit">
        </p>
        </form>
        </div>
        <div class="success-message-subscribe"></div>
        <div class="error-message-subscribe"></div>

<script>
jQuery(document).ready(function() {
$('.success-message-subscribe').hide();
$('.error-message-subscribe').hide();
    $('.box_form form').submit(function() {
        var postdata = $('.box_form form').serialize();
        $.ajax({
            type: 'POST',
            url: 'contact.php',
            data: postdata,
            dataType: 'json',
            success: function(json) {
                if(json.valid == 1) {
                    $('.box_form').hide();
                    $('.error-message-subscribe').hide();
                    $('.success-message-subscribe').hide();
                    $('.subscribe form').hide();
                    $('.success-message-subscribe').html(json.message);
                    $('.success-message-subscribe').fadeIn();
                }
            }
        });
        return false;
    });
});
</script>
        </body>
        </html>

和PHP部分:

您可能可以忽略其中的大部分内容,因为它在不使用 Ajax 时有效。只有最后几行给出了响应$array['valid'] = 1;然后应该被上面的if(json.valid == 1)捕获。

<?php
        ( REMOVED API CALL CODE FROM ABOVE HERE )
        if (isset($_POST['submit'])) { 
        foreach($_POST as $key => $value){
            if(preg_match('/^z_/i',$key)){
                $arr[strip_tags($key)] = strip_tags($value);
            }
        }
        $create = json_encode(array('ticket' => array(
        'subject' => $arr['z_subject'], 
        'comment' => array( "body"=> $arr['z_description']), 
        'requester' => array('name' => $arr['z_name'], 
        'email' => $arr['z_requester'])
        )));
        $return = curlWrap("/tickets.json", $create, "POST");

        $array = array();
        $array['valid'] = 1;
        $array['message'] = 'Thank you!';
        echo json_encode($array);

  ?>

任何想法为什么这不起作用?

我希望您将contact.php用作相对 URL 无法正确解析。检查您的 JavaScript 控制台,您应该会看到一个显示帖子失败的错误。将contact.php更改为www.your_domain.com/contact.php,它应该可以正常工作

替换 jQuery(document).ready(function() { by

$(document).ready(function() {

其次来自Jquery文档:

注意:只有"成功的控件"才会序列化为字符串。不 "提交"按钮值已序列化,因为表单未提交 使用按钮。要将表单元素的值包含在 序列化字符串,则元素必须具有 Name 属性。值来自 复选框和单选按钮(输入类型为"单选"或"复选框") 仅当选中时,才包括在内。来自文件选择元素的数据 未序列化。

因此,提交按钮不会通过jQuery.serialize()函数进行序列化。

解决方案如下:

<script>
$(document).ready(function() {
$('.success-message-subscribe').hide();
$('.error-message-subscribe').hide();
    $('#submitter').click(function(e) {
        e.preventDefault();
        $myform = $(this).parent('form');
        $btnid = $(this).attr('name');
        $btnval = $(this).attr('value');
        var postdata = $myform.serialize();
        $.ajax({
            type: 'POST',
            url: 'contact.php',
            data: { "btnid" : $btnid, "btnval": $btnval, "form-data": $form.serialize() },
            dataType: 'json',
            success: function(json) {
                if(json.valid == 1) {
                    $('.box_form').hide();
                    $('.error-message-subscribe').hide();
                    $('.success-message-subscribe').hide();
                    $('.subscribe form').hide();
                    $('.success-message-subscribe').html(json.message);
                    $('.success-message-subscribe').fadeIn();
                }
            }
        });
        return false;
    });
});
</script>