0

用于登录和验证的 Ajax 函数似乎无法访问 .php 文件进行验证。

我是 JS 和 Ajax 的新手,并且遵循了一些在线教程,然后我尝试用我已经拥有的东西来实现它并且问题开始了。

我在 Ajax 调用的页面顶部放置了一个回显,它永远不会显示。我已经输入了 url 以确保它工作正常。(显示回声)

我已经检查了几次代码,看不到任何明显的错误,但我并不完全确定我应该寻找什么。

如果我将 PHP 留在 HTML 页面的“标题”中,它可以正常工作,但我知道这是不好的做法。感谢任何帮助。

HTML:

 <form method="post" action="" id="ourLoginFormID_JS">
                    <div class="ourContactFormElement2">
                        <label for="username">Username:</label>
                        <input type="text" id="username"  name="username" autocomplete="off" class="required" value="<?php if(isset($_POST['username'])) echo htmlentities($_POST['username']); ?>"  />
                    </div>

                    <div class="ourContactFormElement2">
                        <label for="password">Password:</label>
                        <input type="password" id="password" name="password" autocomplete="off" class="required"/>
                    </div>

                    <div class="ourContactFormElement2">
                        <label> &nbsp; </label>
                        <input type="submit" name="loginButton" id="loginButton" value="Login!" onclick="validLogin()"/>
                    </div>

                    <div id="statusLogin"></div>
                </form>

阿贾克斯:

function validLogin(){

$('.error').hide();
var username = $('#username').val();
if(username == ""){
    $('label#usernameError').show();
    $('input#username').focus();
    return false;
}

$('.error').hide();
var password = $('#password').val();
if(password == ""){
    $('label#passwordError').show();
    $('input#password').focus();
    return false;
}

var params = "username="+username+"&password="+password;
var url = "loginProcessAjax.php";

$("#statusLogin").show();
$("#statusLogin").fadeIn(400).html('<img src="image/loading.gif" />');

$.ajax({
    type: 'POST',
    url: url,
    dataType: 'html',
    data: params,

    beforeSend: function() {
        document.getElementById("statusLogin").innerHTML= 'checking...'  ;
    },

    complete: function() {

    },

    success: function(html) {
        $("#statusLogin").hide();
        document.getElementById("statusLogin").innerHTML= html;
        if(html=="success"){

            window.location = "index.php"

        }

    }
});
}

PHP - 我知道这个页面上可能存在一些相互矛盾的问题,但它并没有那么远,但是如果你有任何指针也很棒。

<?php
//check fields are filled in
echo "HULLOOOO!!!!!"; // doesn't display when run in function but ok from url

if(empty($_POST) === false){

$username = trim($_POST['username']);
$password = trim($_POST['password']);

//validate fields
if(empty($username) === true || empty($password) === true){
    $errors[] = 'Your username and password are needed.';
}else if($users->userExists($username) === false){
    $errors[] = 'That username does not exist';
}else if($users->emailActivated($username) === false){
    $errors[] = 'You need to activate the account, please check your email.';
}else{

    //start login
    $login = $users->login($username, $password);
    if($login === false){
        $errors[] = 'That username or password is invalid';
//
//            if(empty($errors) === false){
//                echo '<p>' .implode('</p><p>', $errors).'</p>';
//            }

    }else{
        //destroy old session and create new - prevents session fixation attacks
        session_regenerate_id(true);
        //all details are correct - the method returns the id to be sotred as a session
        $_SESSION['id'] = $login;
        //send user to their home page
        echo "success";
        header('Location: userHome.php');
        exit();
    }
}
}
4

1 回答 1

0

您发布请求的数据格式不正确。使用{'property1': 'value1', etc}.

首先尝试使用 PHP 显示数据,当您确定 jQuery 和 PHP 之间的连接运行良好时,使其更复杂。

使用 Firebug 或开发者工具查看是否出现错误。

于 2013-07-18T23:20:19.517 回答