【问题标题】:HTML form post to PHP call using AJAX使用 AJAX 将 HTML 表单发布到 PHP 调用
【发布时间】:2012-03-15 20:48:36
【问题描述】:

我正在尝试将 HTML 表单中的地址条目通过 POST 和电子邮件发送到 PHP 脚本,以将结果存储在数据库中。如果用户输入无效的电子邮件地址等,该脚本还负责触发错误消息。我希望整个过程涉及 AJAX 调用,以便每次用户点击提交时都不必重新加载页面表单上的按钮。

到目前为止,每次用户点击表单提交按钮时,页面都会被刷新,我会从 ajax 调用中得到响应,但由于刷新,它会立即被覆盖。

这是我的 HTML 和 Javascript/ajax:

<div id="emailform">
<form method="post"><!--action="planethome.php"-->
<input class="emailinput" type="text" name="email" maxlength="80" placeholder="enter your email address"/>
<input class="submitemailbutton" name="send_button" type="submit" value="Send" onClick="ajaxFunction()/>
<input type="hidden" name="submitted" value="TRUE"/>
</form>
</div>

<div id="errororsuccess">
</div>


<!--ajax stuff:---------------------------------->


<script language="javascript" type="text/javascript">
//Browser Support Code"
function ajaxFunction(){
    var ajaxRequest;  // The variable that makes Ajax possible!

    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Ajax is struggling in your browser.");
                return false;
            }
        }
    }

    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){

            document.getElementById('errororsuccess').innerHTML = ajaxRequest.responseText;     

            }
    }

    // Create a function that will receive data sent from the server
    ajaxRequest.open("POST", "addemailtodatabase.php", true);
    ajaxRequest.send(null); 
}

这是我的 PHP:

<?php

    require_once ('planetconfig.php');

    if (isset($_POST['submitted'])) { /

        require_once (MYSQL);

        $email = FALSE;


        $trimmed = array_map('trim', $_POST);


        if (!empty($_POST['email'])) 
        {

            if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$_POST['email'])) {

                $email = mysqli_real_escape_string ($dbc, $trimmed['email']);

            } else {
                echo "Invalid";         
            }

        } else {
                echo "You need to enter an email address";

        }


        if ($email) { 

            $q = "INSERT INTO planetemail (email, time) VALUES (AES_ENCRYPT('$email', 'password'), NOW())";

            $r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));

            if (mysqli_affected_rows($dbc) == 1) { 

                echo "Thanks, we'll be in touch";

                exit();

            } else { 
                echo '<p class="error">We\'re sorry, something has gone wrong.</p>';
            }
        }

    mysqli_close($dbc);

} 
?>

我确定这与我的 POST 方法或我的 ajax 调用设置方式有关。

我对这一切都很陌生,谁能告诉我我做错了什么或提出更好的实施方案。我有一个明天早上的最后期限来完成这项工作。

【问题讨论】:

  • 这太糟糕了。使用 jQuery
  • 想详细说明它有多糟糕,而不仅仅是说它很糟糕?
  • Crikey,我曾经很糟糕!更新 - 如果有人正在阅读这篇文章,请忽略我编写的所有内容并将 jQuery 用于 AJAX,它可能会让您的生活更轻松,为后端使用某种 Web 应用程序框架,而不是像我那样编写糟糕的 PHP .我向初学者推荐 CodeIgniter。

标签: php javascript html ajax forms


【解决方案1】:
if (isset($_POST['submitted'])) { /

您的代码中有一个杂散的 /。

另外,将 type="submit" 更改为 type="button"

onClick 事件处理程序将接收提交,因为您正在发出 AJAX 请求,无需 POST。

【讨论】:

  • 不确定您所说的流浪是什么意思?
  • 该行末尾的斜线不属于那里。它导致语法错误。
【解决方案2】:

第一,是的,这很糟糕,使用 jquery。第二,虽然您已经使用提交按钮的 onclick 绑定了 ajax 调用,但您并没有阻止执行默认行为。表单仍会以通常的方式提交。

【讨论】:

    【解决方案3】:

    您的问题是您使用的是提交按钮。提交按钮将提交表单,将其从 type="submit" 更改为 type="button" 并且它将起作用,并且正如 @juzerali 建议的那样,使用 jQuery,该代码让我头疼。

    【讨论】:

    • 您的意思是对整个 Ajax 部分使用 jQuery?感谢您的输入,我认为表单提交类型是问题
    • 按钮提交类型是问题所在,但总的来说,jQuery 让 ajax 变得如此简单,并为您提供了更多,您真的应该考虑使用它。它在你的简历上也很棒,因为很多雇主都想要它(尽管大多数人都不知道它是什么)
    • 太好了,我现在就整理一下
    • 我要去吃晚饭,把它修好,然后标记为正确(希望如此!)
    • 听取了你的建议,jQuery 很棒。
    【解决方案4】:

    return false;在脚本末尾,以防止它以正常方式提交。

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 2012-01-22
      相关资源
      最近更新 更多