繁体   English   中英

AJAX不会触发PHP脚本

[英]AJAX isn't triggering PHP script

我一生无法弄清楚这里发生了什么。 我将打开另一个浏览器,以检查我所做的更改是否有效,也许其他浏览器已缓存了某些内容,它将起作用! 但是后来我又做了一次,似乎没有。 我要疯了。

在我的网站syllableapp.com上,我创建了一个可以连接的MySQL数据库。 我制作了一个连接到它的PHP脚本,向它添加了一个简单的条目,然后完成了。 它称为register_email.php ,可在此处访问。 通过该URL手动访问它将添加该条目。 其代码如下:

<?php
    $db = new mysqli("localhost", "username", "password", "table");

    if ($db->connect_error) {
        echo "Could not connect to database.";
        exit;
    }
    else {
        $db->query("INSERT INTO emails (email) VALUES ('weird')");
        echo 1;
    }
?>

如果我检查,它将被添加。

但是,我希望从表单中添加它。 我在http://syllableapp.com/test/index.html上有一个HTML文件,看起来像这样:

<html>
    <head>
        <title>Syllable - iPhone Speed Reader</title>

        <link rel="stylesheet" href="styles/style.css">

        <script type="text/javascript" src="scripts/jquery-1.8.1.min.js"></script>
        <script type="text/javascript" src="scripts/scripts.js"></script>
        <script type="text/javascript" src="scripts/jquery-ui-1.8.23.min.js"></script>
    </head>
    <body>
        <div class="content">
            <img src="images/app-icon.png" alt="App icon">

            <h1>Syllable</h1>
            <p>Speed reading app for iPhone. Devour all your Instapaper and Pocket articles, and learn to read much faster in the process.</p>

            <form method="post" action="">
                <input type="email" class="email" placeholder="Email me when it's live">
                <input type="submit" class="submit" value="Send">
            </form>

            <a href="http://twitter.com/syllableapp"></a>
        </div>
    </body>
</html>

因此,当用户提交表单时,我链接到顶部的JavaScript文件拦截了提交按钮的按下,并调用AJAX函数将其提交给PHP表单。 那个的jQuery看起来像:

$(document).ready(function() {
    $('input[type="submit"]').click(function() {
        var email = $.trim($('.email').val());
        var emailRegEx = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;


        if (email == "" || !emailRegEx.test(email)) {
            event.preventDefault();
            $(this).effect("shake", { times:2 }, 75);
        }
        else {
            $.ajax({
                type: "POST",
                url: "http://syllableapp.com/test/register_email.php",
                data: { "message": "hi" },
                success: function(data) {
                    alert("success");
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    alert("failure");
                }
            });

        }
    });
});

它基本上只是检查它是否是一个有效的电子邮件地址,如果是,则调用PHP文件。

但是,每次单击提交时,都会显示失败。 为什么这在发生呢? 为什么我可以直接访问它,但不允许我使用AJAX?

只是一个猜测,但是在您的AJAX块中,将URL行更改为:

url: "register_email.php",  

另外,作为测试,

(1)将AJAX成功功能中的Alert命令更改为:

alert(data); 

和(2)在文件“ register_email.php”中的<?php指令之后立即插入以下行:

die('Made it to here');

一些东西:

1)您的表单需要采取措施,否则它不是正确的HTML。 您可以将其设置为“#”之类的值

2)单击提交按钮时,您希望使用自定义ajax而不是通过标准方式提交表单。 您的click事件的ajax处理程序应类似于:

$('input[type="submit"]').click(function(event) {
event.preventDefault();
//...
});

您的代码中包含event.preventDefault,但是未将事件变量传递给该函数。 而且我认为您希望每次都调用event.preventDefault,而不仅仅是在输入验证失败的情况下。

3)代替使用警报,请尝试使用console.log并监视您的JavaScript控制台以查看是否出现任何错误。 将这些错误添加到您的问题中,以帮助我们解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM