AJAX调用通过POST发送数据,但PHP没有收到

时间:2015-12-23 15:44:50

标签: javascript php jquery ajax post

所以,我有这个非常奇怪的问题。我已经在家用电脑上构建了一个带有登录表单的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日志:

Firebug log

添加完整的错误日志会给我以下内容:

"<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 />
" 

我希望你们能帮帮我。

5 个答案:

答案 0 :(得分:3)

你在这里混合MySQL API(用mysqli_连接然后使用mysql_ escape函数)。

$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不会混合。

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

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

// rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

同时检查查询错误:

$status = mysqli_query($conn, $sql) or die(mysqli_error($conn));

答案 1 :(得分:0)

您可以打印

echo json_encode(array('username' => $username2));

原因,你设置的输出格式是JSON。 另外,你可以在ajax请求上使用 success 处理程序,并且只使用响应消息(并非所有XMLHttpRequest响应)

答案 2 :(得分:0)

我不是一个php专家,但看起来你在Ajax调用上缺少一些东西。

以下是我的建议: 要发布Json,您需要使用JSON.stringify(数据)进行字符串化 也不要忘记将processdata选项设置为false。

请在数据后将吹线放在您的ajax通话中:{username:username,password:password},

data:JSON.stringify(data), processData:false,

答案 3 :(得分:0)

在php中试试这个,

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

您正尝试从数据对象访问responseText属性。并仅回显$username字符串

答案 4 :(得分:0)

我在你的AJAX代码中看到你说你正在接收JSON数据,但是在php文件中你刚刚发出了一个echo或die而且那个JSON数据是纯文本。因此,请尝试将datatype: "text"放在AJAX代码上。