【问题标题】:Submit and AJAX提交和 AJAX
【发布时间】:2014-05-02 11:25:22
【问题描述】:

我有一个使用带有 AJAX 的 POST 方法的注册表单,我是否需要将提交按钮的类型设为“提交”,因为 php 函数似乎只适用于要提交的类型,但我希望 ajax 发送关闭数据并立即返回结果,无需更改页面。

HTML

<form name = "reg" action = "insert.php" method = "POST">
    <table>
        <tr>
            <td class="ule">First Name</td>
            <td><input type = "text" name="firstnames" id="firstnames"></input></td>
        </tr>
        <tr>
            <td class="ule">Last Name</td>
            <td><input type = "text" name="lastnames" id="lastnames"></input></td>
        </tr>
        <tr>
            <td class="ule">Email</td>
            <td><input type = "text" name="emails" id="emails"></input></td>
        </tr>
        <tr>            
            <td class="ule">User Name</td>
            <td><input type = "text" name = "usernames" id="usernames"></input></td>
        </tr>
        <tr>
            <td class="ule">Password</td>
            <td><input type = "password" name = "passwords" id="passwords"></input></td>
        </tr>
    </table>
    <div class="regButton">
        <button onclick = "register()" type = "button" >Register</button>
    </div>
</form>

PHP

<?php
session_start();

$db = sqlite_open('my_database.db', 0666, $error);

$fname = $_POST["firstnames"]; //potential problem area
$lname = $_POST["lastnames"];
$email = $_POST["emails"];
$user = $_POST["usernames"];
$pass = $_POST["passwords"];

$query = "INSERT INTO User (firstName, lastName, Email, Username, Password) VALUES ('.$fname','.$lname','.$email','.$user','.$pass')";

insertRows($db, $fname, $lname, $email, $user, $pass, $query);

function insertRows($dbs, $names, $lnames, $emails, $usernames, $passwords, $querys)
{
    if($names != NULL && $lnames != NULL && $emails != NULL && $usernames != NULL && $passwords != NULL)
    {
        echo "Thank you for registering";       
        $result = sqlite_query($dbs, $querys);  
    }
    else
    {
        echo "<h1 style=color:red;>Fill out required fields</h1>";
    }   
}

?>

JavaScript

function register(){
    var xmlHTTPreq1;
    var name = encodeURIComponent(document.getElementById('firstnames').value);
    var lastname = encodeURIComponent(document.getElementById('lastnames').value);
    var myemail = encodeURIComponent(document.getElementById('emails').value);
    var users = encodeURIComponent(document.getElementById('usernames').value);
    var passwords = encodeURIComponent(document.getElementById('passwords').value);
    var params = "fname="+name+"&lname="+lastname+"&email="+myemail+"&user="+users+"&pass="+passwords;

    if (window.XMLHttpRequest) {
        try {
            xmlHTTPreq1 = new XMLHttpRequest();
        } catch(e) {
            xmlHTTPreq1 = false;
        }
    } else {
        try{
            xmlHTTPreq1 = new ActiveXObject("Microsoft.XMLHTTP");
        }catch(e){
            xmlHTTPreq1 = false;
        }
    }

    xmlHTTPreq1.onreadystatechange = function()
    {
        if(xmlHTTPreq1.readyState == 4 && xmlHTTPreq1.status == 200){
            document.getElementById('myDiv').innerHTML = xmlHTTPreq1.responseText;
        }
    }
    xmlHTTPreq1.open("POST", "insert.php?", true);
    xmlHTTPreq1.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlHTTPreq1.send(params);
}

【问题讨论】:

    标签: php ajax sqlite submit


    【解决方案1】:

    不,你没有,你可以有一个任何类型的按钮或一个链接或任何实际的东西,并通过你的 AJAX 调用向它添加一个onclick() 事件。

    请注意,如果您在表单的 onsubmit() 事件中返回 false,则提交按钮实际上不会提交表单(并因此重新加载页面)。

    例如:

    <form method='post' onsubmit='doAjax();return false;'>
    <input.../>
    <input.../>
    <input type='submit'... />
    </form>
    

    【讨论】:

    • 当我使用“提交”作为类型但加载了不同的页面时,PHP 函数起作用,但是当我将类型设置为“按钮”时,AJAX 会在 PHP 表单中返回 else 子句跨度>
    • 使用提交按钮,并在表单中添加如图所示的“return false”,它是否按预期工作?
    • 不,我已经进行了建议的更改,但是当我填写表单中的所有字段并单击按钮时,仍然返回 PHP 函数中的 else 子句
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多