使用PHP通过AJAX发送表单,无需刷新页面

时间:2014-08-19 11:55:19

标签: javascript php html ajax mysqli

所以我有这个代码用PHP和AJAX POST数据而不重定向页面,我在登录页面上使用相同的脚本。登录页面就像一个魅力,但其他页面不是。这些之间唯一的区别是登录php脚本页面使用if (empty($_POST) === false) {}而其他页面使用if (isset($_POST['save-settings'])) {}。我不知道该怎么做..下面是我正在使用的脚本。

HTML BUTTON

<input id="save-settings" class="submit" type="submit" name="save-settings" value="Save" onclick="return false;" />

JS SCRIPT

$(document).ready(function() {
        $("#save-settings").click(function() {
            var name        = $("#webname").val();
            var charset     = $("#webchar").val();
            var meta        = $("#webmeta").val();
            var description = $("#webdesc").val();
            var startsite   = $("#webstartsite").val();
            var starturl    = $("#webstartsiteurl").val();
            var footer      = $("#webfooter").val();

            $.post("../lib/action.php", {
                name: name,
                charset: charset,
                meta: meta,
                description: description,
                startsite: startsite,
                starturl: starturl,
                footer: footer
            }, function(data) {
                $("#gy-main-notification-bar").hide().html("<h1>!</h1><h2>" + data + "</h2>").slideDown(500);
                setTimeout(function() { $("#gy-main-notification-bar").slideUp(500) }, 2500);
            });
        });
    });

PHP SCRIPT

if(isset($_POST['save-settings'])) {
    $updatesettings = "UPDATE `settings` SET
    `name`='".escape($_POST['webname'])."',
    `charset`='".escape($_POST['webchar'])."',
    `meta`='".escape($_POST['webmeta'])."',
    `description`='".escape($_POST['webdesc'])."',
    `startsite`='".escape($_POST['webstartsite'])."',
    `starturl`='".escape($_POST['webstartsiteurl'])."',
    `footer`='".escape($_POST['webfooter'])."'
     WHERE `id`= 1";

     if ($update_settings = $db_connect->query($updatesettings)) {}
     echo 'Success!';
 }

由于我在一个action.php文件中包含了所有isset脚本,因此我真的不想将脚本中的empty更改为"onclick"。当我从输入中移除onclick="return:false;"时,它会起作用。我很困惑,我对任何帮助感到高兴!

3 个答案:

答案 0 :(得分:1)

Click事件处理函数可以有事件参数。捕获此参数时,可以使用preventDefault()方法。使用此方法,将阻止点击的默认操作,并且不会刷新页面。

更改

$("#save-settings").click(function() {
        var name        = $("#webname").val();

$("#save-settings").click(function(ev) {
        ev.preventDefault();
        var name        = $("#webname").val();

答案 1 :(得分:0)

您忘记包含帖子保存设置。您可能应该将它包含在这样的ajax帖子中:

$.post("../lib/action.php", {
            'name': name,
            'charset': charset,
            'meta': meta,
            'save-settings': true,
            'description': description,
            'startsite': startsite,
            'starturl': starturl,
            'footer': footer
        },

在sql语句中更改此内容以获取正确的帖子

 `name`='".escape($_POST['name'])."',
`charset`='".escape($_POST['charset'])."',
`meta`='".escape($_POST['meta'])."',
`description`='".escape($_POST['description'])."',
`startsite`='".escape($_POST['startsite'])."',
`starturl`='".escape($_POST['starturl'])."',
`footer`='".escape($_POST['footer'])."'
 WHERE `id`= 1";

答案 2 :(得分:0)

在HTML中编写onclick="return false"会取消执行javascript代码。只需删除此onclick="..."并添加preventDefault(),以防止表单提交

$("#save-settings").click(function(e) {
   e.preventDefault();
   .....