我的服务器端php没有从我的客户端AJAX获取数据

时间:2017-04-16 11:28:27

标签: javascript php jquery ajax post

这是我的AJAX代码:

 $("#loginbutton").click(function(){
              var email = $('#email').val();
              var password = $('#password').val();
              $.ajax({
               url: 'login.php',
               type: 'POST',
               dataType: 'json',
               data: { email:email, password:password},
               success: function(data){
                 $("#samplediv").innerHTML ="Welcome";
                }
              });
             });

这是我的PHP:

 <?php
 session_start();
 $conn = mysqli_connect("localhost", "root", "", "getpet");
 if(isset($_POST['email'])){
   echo $_POST['email'];
 }
?>

你可以看到它将是一个登录系统,但是php没有写出$_POST['email'] 变量。我认为这可能是一个语法错误,只是我太盲目了。如果有人可以帮助我,我将非常感激。

更新: 这是我的整个PHP代码,我认为它不相关,但这是有原因的,为什么我使用dataType:json。

 <?php
 session_start();
 $conn = mysqli_connect("localhost", "root", "", "getpet");
 if(isset($_POST['email'])){
   echo $_POST['email'];
 }/*
 $results = array(
   'success' => false,
   'user_id' => "azaz",
   'fname' => "",
   'lname' => ""
 );
 if(!empty($_POST['email']) && !empty($_POST['password'])){
        $email = $_POST['email'];
        $password = md5($_POST['password']);
        $sql= "SELECT * FROM users WHERE email = '$email' AND password = '$password'";
        $rowsql = mysqli_query($conn, $sql);
        $row = mysqli_fetch_array($rowsql, MYSQLI_BOTH);
        if(mysqli_num_rows($rowsql) == "1"){
            $_SESSION['user_id'] = $row['user_id'];
            $_SESSION['fname'] = $row['fname'];
            $_SESSION['lname'] = $row['lname'];

      $results['success'] = true;
      $results['user_id'] = $row['user_id'];
      $results['fname'] = $row['fname'];
      $results['lname'] = $row['lname'];
      }
    }

            //echo json_encode($results);*/
 ?>

4 个答案:

答案 0 :(得分:2)

在您的数据对象中,您的键不是字符串,而是您定义的变量。这样做是为了让字面意思emailpassword

data: { 'email':email, 'password':password},

答案 1 :(得分:0)

我认为这是一个跨文本的问题,但正常情况下这会在控制台中显示出来。将错误输出附加到您的json并查找它,如果它是一个php错误,您现在会被注意到。

$.ajax({
    url: 'login.php',
    type: 'POST',
    dataType: 'json',
    data: { email:email, password:password},
    success: function(data){
        $("#samplediv").innerHTML ="Welcome";
    },
    error: function (jqXHR, textStatus, errorThrown) {{
        console.error('ajax response failed');
        console.log(jqXHR.responseText);
    }
});

答案 2 :(得分:0)

  

- &GT;确保你调用jQuery :)    - &GT;添加文件准备好了    - &GT;添加防止默认    - &GT;使用输入而不是按钮只是我的便利

<script type="text/javascript">

$(document).ready( function() { /* only when everything is set up */

$("#loginbutton").click(function(e){
e.preventDefault();

          var email = $('#email').val();
          var password = $('#password').val();
          $.ajax({
           url: "login.php",
           method: "POST", /* changed to `method` */
           data: "email="+email+"&password="+password, /* MODIFIED */
           success: function(data){
             alert(data);
             $("#samplediv").html("Welcome !");
            },
           error: function (request, status, error) { /* added error handling */
           alert(request.responseText);
           }
          });
         });
  });
</script>

<div id="samplediv"></div>

<form action="#" id="form" method="post">
<p><input type="text" name="email" id="email" value="" /> email</p>
<p><input type="text" name="password" id="password" value="" /> pwd</p>
<input type="submit" id="loginbutton" value="GO" />
</form>

当然,输入password类型!

由于我不知道你为什么用DB连接(可能选择?),我只是把php文件简单化了,如下:

<?php
/* login.php */
error_reporting(E_ALL); ini_set('display_errors', 1);

$email = $_POST['email'];
$pwd = $_POST['password'];

echo"[ email > $email / pwd : $pwd ]"; /* for example only, of course, not with real credentials  */

?>
编辑原始问题后,我看到了PHP代码,我建议

  

不再使用MD5,而是使用password_hash / password_verify

     

你应该真的考虑使用PPS : Prepared Parameterized Statements。这将有助于Preventing SQL injection

答案 3 :(得分:0)

$("#samplediv").innerHTML ="Welcome";错了

这里有一个jquery元素,并尝试使用vanilla函数进行访问。

$("#samplediv").text("Welcome");
// or 
$("#samplediv")[0].innerHTML = "Welcome";

如果您打开浏览器开发工具,它应该显示错误:

innerHTML不是...的功能