Ajax jQuery表单无法正常工作,导航到PHP文件

时间:2015-06-04 18:18:44

标签: javascript php jquery ajax forms

我在使用ajaxForm插件时遇到问题。我希望它在不离开页面的情况下向用户显示结果消息。

问题在于,当我提交表单时,不是将警报预先添加到.jumbotron.modded(这是表单的div容器),而是导航到supportForm.php并显示回显的数字。< / p>

这有时会很好用,但大多数时候它只是导航到supportForm.php。我无法理解为什么它并不总是有相同的行为。

这是HTML表单:

        <form id="supportForm" action="supportForm.php" method="post" style="padding-top:10px">
            <div class="form-group">
                <input type="text" name="subject" id="subject" placeholder="Subject" class="form-control" required>
            </div>
            <div class="form-group">
                <textarea class="form-control" rows="4" name="comment" id="comment" placeholder="Write your message here" required></textarea>
            </div>
            <button type="submit" class="btn btn-upload" style="margin-top:20px;float:right;" value="">SEND<img src="img/plus.png" style="margin-bottom:5px;padding-left:5px;" /></button>
        </form>

这是Javascript代码:

    window.onload = function()
    {
        $('#supportForm').ajaxForm({
            success: function(res) {
                console.log(res);
                if(res=='1')
                {
                    $(".jumbotron.modded").prepend('<div class="alert alert-success alert-dismissible" role="alert">  <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>Successfully sent. Thank you</div>');
                }else{
                    switch(res)
                    {
                        case '0':
                            $(".jumbotron.modded").prepend('<div class="alert alert-danger alert-dismissible" role="alert">  <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>Error 1. Please contact mail@asd.com<</div>');
                        break;
                        case '-1':
                            $(".jumbotron.modded").prepend('<div class="alert alert-danger alert-dismissible" role="alert">  <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>Error 2. Please contact mail@asd.com<</div>');
                        break;
                        case '-2':
                            $(".jumbotron.modded").prepend('<div class="alert alert-danger alert-dismissible" role="alert">  <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>Error 3. Please contact mail@asd.com</div>');
                        break;
                        case '-3':
                            $(".jumbotron.modded").prepend('<div class="alert alert-danger alert-dismissible" role="alert">  <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>Error 4. Please contact mail@asd.com<</div>');
                        break;
                    }
                }
            }
        });
    }

这是PHP代码:

if ($row = $db->query("SELECT user FROM tblusers WHERE userId='".$fromId."'")->fetch_array())
{
    $fromMail1 = $row['user'];
    if($row2 = $db->query("SELECT name,lastname,email FROM tblprofile WHERE userId='".$fromId."'")->fetch_array())
    {
        $fromMail2 = $row2['email'];
        $fromName = $row2['name']." ".$row2['lastname'];
        if ($db->query("INSERT INTO tblSupports (supportTitle,supportComment,userId) VALUES ('".$title."','".$comment."','".$fromId."')"))
        {
            if(sendEmail($fromMail1,$fromMail2,$fromName,$titleClean,$commentClean))
            {
                echo 1;
            }else{// (error 1)
                echo 0;
            }
        }else{//(error 2)
            echo -1;
        }
    }else{//(error 3)
        echo -2;
    }
}else{//(error 4)
    echo -3;
}

我该如何解决这个问题?非常感谢你

4 个答案:

答案 0 :(得分:1)

试试这个

$('#supportForm').ajaxForm({
    /* bla-bla-bla*/

    return false;
    })

但我真的不明白,你正在使用这个插件。没有任何插件很容易做到。

$('#submit').click(function(){
    $.ajax({
      method: "POST",
      url: "some.php",
      data: $('#supportForm').serialize(),
        success: function(data){
            alert(data)
        }
        error: function(error){
            alert(error);
        }
    });
    return false;
});
像这样的东西。

答案 1 :(得分:1)

确保在调用此函数之前实际包含了jquery.form.js脚本。 你可以在firefox上使用firebug进行检查,例如:在ajaxForm调用上设置一个断点,然后当它停在那里时,查看jquery.form.js是否在脚本中。

答案 2 :(得分:0)

在检查之前尝试.trim你的回复,可能是那里的一些空白

$.trim(res);

编辑:修剪没有工作 - 在你点击提交之前,onload功能是否可能没有被触发?如果你把console.log放在下面,你就会知道它是否已经先被解雇了。这可能解释了为什么有时候它有效,有时却没有。如果它在控制台输出时始终有效,那么您就可以得到答案。

 window.onload = function()
  {
    console.log('fired');
   $('#supportForm').ajaxForm({

答案 3 :(得分:0)

绝对松动插件并确保加载Jquery然后在你的js函数文件中使用:

$('#supportForm').on('submit', function(e) {
        e.preventDefault();
        $(this).find('input[type="submit"]').val('Processing');
        $.ajax({
            type: "POST",
            url: 'http://supportForm.php',
            data: $(this).serialize(),
            success:function(data) {
                if (data == 'success') {
                    -- Code if form submitted successfully & returned a positive output --
                }else{
                    -- Code if form submitted successfully but did not return a postive outpt --
                }
            },
            error: function() {
                -- Code if there is an error in your php --
            }
        })
    });

我几乎在所有表单中都使用Ajax,如果一切顺利通过,我所做的就是用我的php文件回复成功。然后,正如您在上面的代码中看到的那样,数据&#39;将是从php文件回显的任何内容,因此您可以继续添加if / else情况,以便回显任何内容。最后一部分是如果你的php文件中有错误,那么该部分将被触发。