JSON登录中的AJAX POST请求


AJAX POST request in JSON login

我正在尝试创建一个非常简单的登录表单,使用AJAX进行服务器通信,并将PHP作为服务器端脚本。作为一个起点,我只是试图通过JSON将登录数据发送到服务器,但它已经给我带来了问题。

问题是,当我用AJAX中的POST请求发送数据时,我的服务器似乎什么也得不到,根本不返回任何数据。这是请求的HTML:

<!DOCTYPE HTML>
<html>
<head>
<title> Login experiment </title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function AjaxJSON() {
    $("form#loginForm").submit(function() {
        var username = $('#username').val();
        var password = $('#password').val();
        var jsonlogin = "{'"username'" : '"" + username + "'" , '"password'" : '"" + password + "'"}";
        var str = 'json=' + jsonlogin;
        $.ajax({
            type: 'POST',
            url: 'login.php',
            // URL of my PHP script
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            data: str,
            success: function(data) {
                alert("Data received!" + data);
            }
        });
        // ajax
        })
    })
</script>
</head>
<body>
<h1> LOGIN: </h1>
<form id="loginForm" name="loginForm" method="post" action="">
<input type="text" id="username" name="username"> USERNAME <br>
<input type="password" id="password" name="password"> PASSWORD <br>
<input type="submit" class="button positive">
</form>
</body>
</html>

这个HTML代码应该简单地将JSON字符串中编码的请求表单(用户名+密码)发送到PHP脚本。脚本是这样的:

<?php
$result = json_decode($_POST['json']);
echo $result->username;
echo " ";
echo $result->password;
?>

为什么它没有给我任何回复?提前感谢您的帮助:)

您的主要问题是您声称正在发送application/json; charset=utf-8。这是一个有两个原因的问题:

  1. PHP没有任何用于处理JSON编码POST数据的内置方法,因此不会填充$_POST
  2. 您的数据不是JSON。它是(错误转义的)application/x-www-form-urlencoded数据(其中包括一个字符串(错误转义)JSON作为其数据片段之一)

如果你想发送JSON,那么:

  • 使用JSON.stringfy构建它,而不是将字符串混合在一起
  • 不要把json=粘在它的前面
  • 根据这个问题从POST主体中获取数据

如果您没有绑定到JSON,那么只需使用标准的方法来编码表单数据:

  • 忘记jsonlogin
  • 不要覆盖默认contentType
  • 将数据的对象传递给数据参数:data: { username: username, password: password }

您的下一个问题是,您说的是dataType: 'json',但您的PHP返回(无效)HTML(该PHP也容易受到XSS攻击)。