Ajax,PHP和PHPCookies的奇怪问题(xhr.readyState 0)

时间:2019-10-27 08:05:02

标签: php ajax cookies xmlhttprequest session-cookies

jQuery

// Submitted FormData is like this - a=value1&b=value2&c=value3

$('#formName').submit(function(e){
  e.preventDefault();
  var formData = $('#formName').serialize();
  $.ajax({
    type: 'POST',
    url: 'file.php',
    data: formData,
    cache: false,
    error: function(xhr, status, error) {
      console.log("xhr.readyState - " + xhr.readyState);
      console.log("xhr.status - " + xhr.status);
      console.log("xhr.statusText - " + xhr.statusText);
      console.log("status - " + status);
      console.log("error - " + error);
      console.log("xhr.responseText - " + xhr.responseText);
    }
  }).done(function(data) {
    console.log(data)
  })
});

PHP

<?php
  header("Cache-Control: no-cache, must-revalidate");
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

  error_reporting(E_ALL);

  date_default_timezone_set('Asia/Kolkata');

  require('includes/connection.php');

  if($_SERVER['REQUEST_METHOD'] == 'POST'){

    $a = $_POST['a'];
    $b = $_POST['b'];
    $c = $_POST['c'];

    if(empty($a) || empty($b) || empty($c)){
      http_response_code(400);
      echo 'all fileds are required';
      exit;
    }else{
      http_response_code(200);
      echo 'all is good';
      exit;
    }

  }else{
    http_response_code(400);
    echo "Not Authorized";
    die();
  }
?>

可设置Cookie的代码

<?php
  header("Cache-Control: no-cache, must-revalidate");
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

  session_start();

  error_reporting(E_ALL);

  date_default_timezone_set('Asia/Kolkata');

  require('includes/connection.php');

  if($_SERVER['REQUEST_METHOD'] == 'POST'){

    $username = mysqli_real_escape_string($scnx, strip_tags(strtolower($_POST['username'])));
    $password = $_POST['passcode'];
    if(empty($username) || empty($password)){
      http_response_code(400);
      echo 'please enter username & password';
      exit();
    }

    $sql = "SELECT username, passcode FROM admins WHERE username = '$username' LIMIT 1";
    $runSql = mysqli_query($scnx, $sql) or exit("unable to SELECT");
    $fetchCount = mysqli_num_rows($runSql);
    $fetch = mysqli_fetch_row($runSql);
    $_username = $fetch[0];
    $_password = password_verify($password, $fetch[1]);
    if($fetchCount != 1){
      http_response_code(400);
      echo 'username doesn\'t exist';
      exit();
    }else if($_password != 1 || $_username != $username){
      http_response_code(400);
      echo "Username & Passcode doesn't match";
      exit();
    }else{
      http_response_code(200);
      $_SESSION["pccadmin_username"] = hash("sha256", $_username);
      $_SESSION["pccadmin_codepass"] = $_password;
      setcookie("pccadmin_username", $_username, time()+(86400));
      setcookie("pccadmin_codepass", $_password, time()+(86400));
      exit;
    }
  }else{
    echo "Not Authorized";
    exit();
  }
?>

上面是代码::

现在问题很奇怪,有2种情况:

  1. 案例1 ::    我注意到设置了自定义Cookie时,Ajax readyState为0 ,并且根本不起作用。View Screenshot

  2. 案例2 ::    一旦我清除了自定义cookie并运行了相同的脚本,一切就可以正常工作。 View Screenshot

请帮助我,我已经浪费了24小时,并尝试了所有可能的事情-逐步调试我的代码似乎没有问题,但仍然无法正常工作。

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

两天后,尝试每种可能的情况,我通过发现名为 pccadmin_codepass 的cookie引起了问题。

我仍然不知道是什么原因造成的,但是更改cookie名称后,代码似乎可以正常工作。

我找到了解决方案,但仍然不知道为什么当设置cookie pccadmin_codepass 时,ajax没有响应-神秘!

如果有人有任何解释,请分享。

谢谢!

相关问题