Ajax post不给php文件赋值,post变成get

Ajax post does not give value to php file, post becomes get

我有这个ajax登录功能。

编辑:我刚刚注意到该服务器运行 php7,而登录有效的其他服务器使用 php5。 php 有什么变化导致此脚本不再有效?

编辑2:看起来服务器请求方法不是post而是改为get,为什么?

解决方案:需要从 url: "./ajaxcall/login.php", 中删除 .php 因为我使用漂亮的 url htaccess.

var InName = $('#InName').val();
        var InPass = $('#InPass').val();
        alert(InName);
        $.ajax({
            type: "POST",
            url: "./ajaxcall/login.php",
            dataType: "json",
            data: {InName:InName, InPass:InPass},
            error: function (request, error) {
                console.log(arguments);
                alert("Inlog Can't do because: " + error);
            },
            success : function(data){
                if (data.code == "200"){
                    $("#InErEr").html(data.msg);
                    //window.location.reload(true);
                } else {
                    $("#InErEr").html(data.msg);
                    $('.lds-dual-ring').animate({opacity: 0}, 300);
                }
            }
        });

alert(InName); 我得到了正确的用户名值。但是当我检查我的 php 文件时 $_POST['InName'] 它是空的。

php 文件的一部分

include('../config.php');

if(empty($_POST['InName'])) {
    $Ierror = 'Username is required.';
}
if($_POST['InPass'] == '') {
    $Ierror = 'Password is required.';
}
$username = $_POST['InName'];
$passwordL = $_POST['InPass'];
// count user in between //
if($Inlognumber_of_rows == 0) {
    $Ierror = 'Username not found.';
} else {
    // password check //
    if(password_verify($salty_pass, $hashed_password)) {
    } else {
        $Ierror = 'Password incorrect.';
    }
}
if ($Ierror == '') {
// do login //
} else {
    $showerror = '<span style="color:#F00;">'.$Ierror.$username.$passwordL.$_POST['InName'].$_POST['InPass'].'</span>';
    echo json_encode(['code'=>404, 'msg'=>$showerror]);
    exit;
}

在 return 消息中,我只得到 $showerror,未找到用户名,没有 posted 值。因此,由于空值,登录无法正常工作?当然,用户也存在于数据库中。我也没有收到空的 $_POST 错误。所以总而言之,在 javascript 中我得到了 InName 的正确值,但在 php.

中却没有

你很接近,但你的错误捕捉不正确......试试这个(Jquery):

var InName = 'something';
var InPass = 'morething';
$.post("./ajaxcall/login.php", {
    InName: InName,
    InPass: InPass
  }, function(data, status) {
    console.log(data, status);
  }).done(function() {
    alert("second success");
  })
  .fail(function() {
    alert("error");
  })
  .always(function() {
    alert("finished");
  });

在你的 php 文件上做 print_r($_POST);你会在你的控制台中收到这个...:[=​​13=]

Array
(
    [InName] => something
    [InPass] => morething
)
 success

基本上你试图打印错误,你应该在其中安慰记录 request.responeText...

知道 post 是否到达 php 的一个好技巧是在 php 文件中这样做:

<?php
print_r($_POST) ;

$newfile = fopen('newfile.txt','a');
fwrite($newfile,json_encode($_POST));
fclose($newfile);

这将打印 post 数据并将其存储在本地文件中....

解决方案:需要从 url 中删除 .php:“./ajaxcall/login.php”,因为我使用漂亮的 url htaccess。