【问题标题】:Ajax call to PHP script on submit of form not working提交表单时对 PHP 脚本的 Ajax 调用不起作用
【发布时间】:2015-11-13 16:16:37
【问题描述】:

我有一个通过 ajax 验证的表单,当提交对 updatepassword.php 的调用时,它会使用 Password2 的输入更新数据库。不过,对 updatepassword.php 的调用有问题,因为它不起作用。请告诉我!谢谢你。 PHP 文件低于所有其他文件。

<script>
function checkForm() {

    var pass = document.getElementById("oldpassword").value;
    var pass1 = document.getElementById("passwordnew1").value;
    var pass2 = document.getElementById("passwordnew2").value;

    if (pass == '' || pass1 == '' || pass2 == '') {
        alert("Fill All Fields");
    } else {

        var passcheck = document.getElementById("editpassword");
        var passcheck1 = document.getElementById("equalpasswords1");
        var passcheck2 = document.getElementById("equalpasswords2");

        if (passcheck.innerHTML == 'Must be 3+ letters' || passcheck1.innerHTML == 'Password too short' || passcheck2.innerHTML == 'Password too short') {
            alert("Fill Valid Information");
        } else {
            document.getElementById("myForm").submit();
        }
    }
}


function validate(field, query) {
    var xmlhttp;

    if (window.XMLHttpRequest) { // for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else { // for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState != 4 && xmlhttp.status == 200) {
            document.getElementById(field).innerHTML = "Validating..";
        } else if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById(field).innerHTML = xmlhttp.responseText;
        } else {
            document.getElementById(field).innerHTML = "Error Occurred. <a      href='index.html'>Reload Or Try Again</a> the page.";
        }
    }

    xmlhttp.open("GET", "validation.php?field=" + field + "&query=" + query, false);
    xmlhttp.send();
}
</script>

<script type="text/javascript">
function submitForm() {
    $("document").ready(function(){
        $(".ajaxcall").submit(function() {

            var data = {
                "action": "test"
            };

            data = $(this).serialize() + "&" + $.param(data);

            $.ajax({
                type: "POST",
                dataType: "json",
                url: "updatepassword.php", 
                data: { Password2: $('#passwordnew2').val()} , 
                success: function(data) {
                    $("#check").html(
                       data["Password2"] 
                    );
                }
            });

            return false;
        });
    });
}
</script>

这是我的 HTML:

<body>
<form action="#" id="myForm" name="myForm" method="post" onsubmit="return   submitForm();" class="ajaxcall">
    <div class="container">
        <table>
            <tr>
                <td><p><b>My email:</b></p></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td><p><b>My password:</b></p></td>
                <td><p id="editpassword"></p><p id="insertpassword"><input id="oldpassword"     name="inputedPassword" onblur="validate('editpassword', this.value)"     type="password"></p></td>
                <td></td>
            </tr>
            <tr>
                <td><p><b>My new password:</b></p></td>
                <td><p id="equalpasswords1"></p><input id="passwordnew1" name="Password1"   onblur="validate('equalpasswords1', this.value)" type="password"></td>
                <td></td>
            </tr>
            <tr>
                <td><p><b>Confirm password:</b></p></td>
                <td><p id="equalpasswords2"></p><input id="passwordnew2" name="Password2"   onblur="validate('equalpasswords2', this.value)" type="password" > <input  type="button" value="Save" onclick="checkForm()"></td>
            </tr>
        </table>
    </div>
</form>

<p id="check"></p>

</body>
</html>

这是updatepassword.php:

<?php
session_start();

$email = $_SESSION['email'];

?>


<?php    
if (is_ajax()) {
    if (isset($_POST["action"]) && !empty($_POST["action"])) { 
        $action = $_POST["action"];
        switch($action) { 
          case "test": test_function($email); break;
        }
    }
}


function is_ajax() {
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&       strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}

function test_function($email) {
    $inData = json_decode(file_get_contents("php://input"));
    $x = $inData["Password2"];

    define('DB_NAME', 'Name');
    define('DB_USER', 'User');
    define('DB_PASSWORD', 'Password');
    define('DB_HOST','HOST');

    $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

    if (!link) {
        die('Could not connect: ' . mysql_error());
    }

    $db_selected = mysql_select_db(DB_NAME, $link);

    if (!$db_selected) {
        die('Can\'t use'. DB_NAME. ': ' . mysql_error());
    }    


    $result = "UPDATE  `Name`.`Students` SET  `Password` =  '$x'  WHERE  `Students`.`StudEmail` = '$email'  ";
    if (!mysql_query($result)) {
        die('error: ' .mysql_error());
    }

    $return["json"] = json_encode($return);
    echo json_encode($return);

    $_SESSION['Password2'] = $x;
}
?>

【问题讨论】:

  • 你可以制作小提琴以便更好地理解吗?
  • 定义“不起作用”。当您调试它时,它在哪里具体失败了? JavaScript 代码是否执行? JavaScript 控制台中是否有错误?是否发出了 AJAX 请求?它是否包含您的期望?服务器的响应是什么?这里有很多我们无法为您完成的调试。
  • jsfiddle.net/6xz80u56 我不知道如何在 jsfiddle 上插入 PHP 代码
  • 表单有效,验证有效,无效的是对 updatepassword PHP 的 ajax 调用。它不会改变数据库。如您所见,有一个

    在其中我通过在“成功”时在此处插入密码 2 来检查 ajax 调用是否有效。但就好像达不到成功一样。

标签: jquery html ajax forms validation


【解决方案1】:

您通过 POST 发送的 JSON 数据在您的 PHP 中无法以您尝试访问它的方式直接使用:

$return["Password2"]

你需要做的

$inData = json_decode(file_get_contents("php://input"));

然后你就可以访问$inData["Password2"]

【讨论】:

  • Rby 还是不行!现在是这样的: function test_function($email){ $inData = json_decode(file_get_contents("php://input")); $x = $inData["Password2"]
  • 你到底得到了什么?
  • 我什么也没得到,表单提交但没有任何反应。这是代码:'&lt;script type="text/javascript"&gt;' function submitForm() { $("document").ready(function(){ $(".ajaxcall").submit(function(){ var data = { "action": "test" }; data = $(this).serialize() + "&amp;" + $.param(data); $.ajax({ type: "POST", dataType: "json", url: "updatepassword.php", data: { Password2: $('#passwordnew2').val()} , success: function(data) { $("#check").html( data["Password2"] ); } }); return false; }); }); }
  • 而 php 文件在描述中,按照您说的进行编辑
  • 你需要调试你的php和ajax代码。首先,在 ajax 方法中添加错误回调函数。其次,在您的 php 中,您正在寻找 $_POST["action"] 但您发送的数据不包含“action”。它只有“密码2”。第三,您需要检查 $_SERVER['HTTP_X_REQUESTED_WITH'] 确实存在。它可能根本不可用,在这种情况下不会调用方法 test_function($email)。您可以在代码顶部添加 var_dump($_SERVER) 和 var_dump($_POST),然后再执行任何操作以查看这些数组中的可用内容。
猜你喜欢
  • 2016-01-17
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
相关资源
最近更新 更多