Javascript AJAX调用通过POST发送数据,但PHP不接收数据

Javascript AJAX调用通过POST发送数据,但PHP不接收数据,javascript,php,jquery,ajax,post,Javascript,Php,Jquery,Ajax,Post,所以,我有一个非常奇怪的问题。我在家里的pc上构建了一个带有登录表单的web应用程序,但当我尝试将其迁移到带有域的服务器时,php变得非常疯狂,现在一切都不工作了 所以我有一个登录表单,它通过一个AJAX POST调用将数据发送到一个php文件,该文件将给定的数据与接口进行比较。但是,似乎在某种程度上,php没有接收到数据。让我向您展示我的设置: Javascript: console.log(username); $.ajax({ url: "server/lo

所以,我有一个非常奇怪的问题。我在家里的pc上构建了一个带有登录表单的web应用程序,但当我尝试将其迁移到带有域的服务器时,php变得非常疯狂,现在一切都不工作了

所以我有一个登录表单,它通过一个AJAX POST调用将数据发送到一个php文件,该文件将给定的数据与接口进行比较。但是,似乎在某种程度上,php没有接收到数据。让我向您展示我的设置:

Javascript:

    console.log(username);
    $.ajax({
        url: "server/login_server.php",
        type: "POST",
        datatype: "JSON",
        data: {username: username, password: password},
        complete: function(data) {
            console.log(data.responseText);

            if(data.responseText == "SUCCESS") {
                location.assign("pages/overview.html");
            }else if(data.responseText == "ERROR_CONNECT") {
                showError("kan niet verbinden met server");
            }else if(data.responseText == "ERROR_CODE") {
                showError("Er is iets misgelopen...");
            }else if(data.responseText == "ERROR_FALSE") {
                showError("Inloggegevens ongeldig");
            }else if(data.responseText == "ERROR_MULTIPLE") {
                showError("Er zijn meerdere resultaten gevonden");
            }else if(data.responseText == "ERROR_FORBIDDEN") {
                showError("Dit account heeft geen admin-privileges");
            }

            $("#login_password").val("");
        },
        error: function(data) {
            console.log(data);
        }
    });
有些台词是用荷兰语写的,但别担心,它没有说任何重要的话。第1行的控制台清楚地写入用户名,因此我知道用户名值不是空的

PHP文件:

<?php
session_start();

$config = include('config.php');

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

$conn = new mysqli($config['db_host'], $config['db_user'],      $config['db_password'], $config['db_name']);

$result = "SUCCESS";

if($conn->connect_error) {
    $result = $conn->connect_error;
    die($result);
}

$sql = "SELECT * FROM users WHERE userName='".$username."'";
$status = mysqli_query($conn, $sql);

if(!$status) {
    $result = "ERROR_CODE";
    die($result);
}

$num_rows = mysqli_num_rows($status);
$row = mysqli_fetch_array($status);

if($num_rows == 0) {
    $result = "ERROR_FALSE";
    die($username);
}else if($num_rows > 1) {
    $result = "ERROR_MULTIPLE";
    die($result);
}else{
    if($row['isAdmin'] == "false") {
        $result = "ERROR_FORBIDDEN";
        die($result);
    }else{
        $_SESSION['logedIn'] = "true";
        $result = "SUCCESS";
        die($result);
    }
}

echo $username;
?>
这是我试图做的一个简单化的表达,但这就是它出错的地方。它从post调用中获取用户名,并将其作为data.responsetext返回到javascript文件

javascript文件依次输出一个空字符串作为php文件的结果

Firebug日志:

添加完整的错误日志将提供以下信息:

"<br />
<b>Notice</b>:  Undefined variable: conn in    <b>/home/netwerklevensein/public_html/dagboek/server/login_server.php</b> on   line <b>8</b><br />
<br />
 <b>Warning</b>:  mysql_real_escape_string() expects parameter 2 to be resource,    string given in    <b>/home/netwerklevensein/public_html/dagboek/server/login_server.php</b> on    line <b>8</b><br />
<br />
<b>Notice</b>:  Undefined variable: conn in    <b>/home/netwerklevensein/public_html/dagboek/server/login_server.php</b> on   line <b>9</b><br />
<br />
<b>Warning</b>:  mysql_real_escape_string() expects parameter 2 to be resource,    string given in <b>/home/netwerklevensein/public_html/dagboek/server/login_server.php</b> on line <b>9</b><br />
" 
我希望你们能帮我。

你们可以打印

echo json_encode(array('username' => $username2));
因为,您将输出格式设置为JSON。
另外,您可以在ajax请求上使用成功处理程序,并且只使用响应消息,而不是所有XMLHttpRequest响应。我不是php专家,但在ajax调用中似乎缺少一些东西

以下是我的建议: 要发布Json,需要使用Json.stringifydata进行字符串化 另外,不要忘记将processdata选项设置为false

请在ajax调用中的数据{username:username,password:password}之后放置blow行

数据:JSON.stringifydata, processData:false,

请在php中尝试此操作

echo json_encode(
     array('responseText' => $result)
);

您正试图从数据对象访问responseText属性。而echo only$username string

您将MySQL API与mysqli连接在一起,然后使用MySQL转义函数

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
这应该理解为

$username = mysqli_real_escape_string($conn,$_POST['username']);
$password = mysqli_real_escape_string($conn,$_POST['password']);
这些不同的API不会混合使用

添加到文件的顶部,这将有助于查找错误

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

我在AJAX代码中看到,您说您正在接收JSON数据,但在php文件中,您只是发出了一个echo或die,这不是JSON数据,而是纯文本。因此,试着在AJAX代码中添加datatype:text。

看看你在回显什么echo$username;看看你的第一行是什么$username2=$_POST['username'];或者这只是一个输入错误?对不起,输入错误,我会纠正它,但仍然不起作用;输出?@zenodhaene如果您正在连接另一个未知的mysqli_u2;或PDO,那么这就是问题所在。您不能混合使用这些不同的API。编辑:你不能把它们混在一起。到目前为止,人们还没有注意到评论/编辑。你的代码给了我以下响应文本;\n注意:U…在第9行\n但当我不使用转义字符串部分时,代码执行得很好?@zenodhaene消息不清楚,似乎是一个未定义的索引通知。你应该按照我在评论中的建议发布你的HTML表单。另外,确保您的JSON是有效的。看看给出的其他一些答案。@zenodhaene我相信转义是抛出有效字符。它很可能是它的JSON声明。如果没有传递JSON,那么就我所知,您不应该使用JSON。查看其他答案和一些关于它的新答案。例如@zenodhaene,未定义变量conn通知。这表明您的连接文件不正确和/或存在语法错误。用$link=mysqli_connect127.0.0.1,my_user,my_password,my_db;我认为,就第一次通知而言,这是问题的根源。mysql_uu函数需要更改为我在回答中包含的函数。连接工作正常,因为我可以从数据库中提取数据。我唯一的问题是,当我尝试用mysql\u real\u escape\u string将其转换为字符串时,php中的变量没有通过。当我不考虑这个问题时,它的处理过程很好。我想我会在javascript中这样做。
$status = mysqli_query($conn, $sql) or die(mysqli_error($conn));