2015-02-24 73 views
0

我正在尝试使用ajax显示来自php的结果登录。但这不起作用。它显示错误像这样的未定义索引。

说明:未定义指数:在USEREMAIL C:\ XAMPP \ htdocs中\控制器\上线login.controllers.php 10

说明:未定义指数:在userPassword的 C:\ XAMPP \ htdocs中\控制器\上线10 login.controllers.php

登录失败

这里是我的源代码: login.views.php

<form id="loginForm" action="/controllers/login.controllers.php" method="post"> 
    <input id ="userEmail" type="text" name="userEmail" placeholder="Email"> 
    <input id ="userPassword" type="password" name="userPassword" placeholder="Password"> 
    <button id ="loginSubmit" type="submit" name="loginSubmit">Login</button> 
    <div id="msg"></div> 
</form> 

login.Controller.php

<?php 

    include("../models/user.models.php"); 
    include("../models/dataBase.models.php"); 
    $dbc = new dataBase(); 
    $connect = $dbc->connect('localhost','root','','how_database','','hide'); 

    if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
     $user = new user(); 
     if ($user->login($connect,$_POST['userEmail'],$_POST['userPassword']) == true){ 
      echo "Login Successful"; 
     } 
     else { 
      echo "Login failed"; 
     } 
    } 

    $dbc->close($connect); 
?> 

loginAjax.js

$("#loginSubmit").click(function(){ 
    if ($("#userEmail").val() == "" || $("userPassword").val() == "") { 
     $("div#msg").html("Please enter your email and password"); 
    } 
    else { 
     $.post(
      $("#loginForm").attr("action"), 
      $("#loginForm:input").serializeArray(), 
      function(data){ 
       $("div#msg").html(data); 
      } 
     ); 
    } 

    $("#loginForm").submit(function(){ 
     return false; 
    }) 
}); 

更新问题: 现在我想补充信息 “等待” 时,单击提交按钮后,隐藏它何时显示结果消息。我必须做什么?。谢谢。

+3

尝试'$( “#登录表单”)连载''的$( “#登录表单:输入”),而不是()。serializeArray()' – 2015-02-24 11:22:18

+0

谢谢。它的工作。 :)。但你可以向我展示他们之间的不同吗? – 2015-02-24 11:29:26

+0

我给你添了一个答案。 – 2015-02-24 11:31:52

回答

0

如果您需要的名单上呼吁serialize()form,不serializeArray()投入。试试这个:

$.post(
    $("#loginForm").attr("action"), 
    $("#loginForm").serialize(), 
    function(data){ 
     $("div#msg").html(data); 
    } 
); 

函数之间的区别是格式输出。 serializeArray()返回一个对象,该对象可能与接收端点的格式不正确,并且serialize()将表单的值转换为查询字符串。

0

试试这个:

$("#loginSubmit").click(function(){ 
    if ($("#userEmail").val() == "" || $("userPassword").val() == ""){ 
     $("div#msg").html("Please enter your email and password"); 
    }else{ 
     var formData = new FormData($("#loginSubmit")[0]); 
     $.ajax({ 
      url: $("#loginForm").attr("action"), 
      type: 'POST', 
      data: formData, 
      async: false, 
     dataType: "json", 
     success: function (data) { 
      //here success 
      }, 
     cache: false, 
     contentType: false, 
     processData: false 
     }); 
    } 

    $("#loginForm").submit(function(){ 
     return false; 
    }) 
}); 
0

使用此

$("#loginForm").serialize() 

,而不是

$("#loginForm:input").serializeArray() 
0

你必须使用

$.post(
     $("#loginForm").attr("action"), 
     $("#loginForm:input").serialize(), 
     function(data){ 
      $("div#msg").html(data); 
     }