Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Ajax发送Javascript对象时未定义的数据_Javascript_Php_Ajax_Javascript Objects - Fatal编程技术网

使用Ajax发送Javascript对象时未定义的数据

使用Ajax发送Javascript对象时未定义的数据,javascript,php,ajax,javascript-objects,Javascript,Php,Ajax,Javascript Objects,假设我试图向PHP发送一个数据,并使用纯Javascript接收它 所以当我发送字符串时,“login=“+1+”&username=“+username+”&password=“+password使用Ajax一切正常,但是对象呢?在这种情况下,我的PHP代码总是告诉username和password是未定义的索引 HTML文档: <body> <form id="loginform"> <input type="text" placeholder="use

假设我试图向PHP发送一个数据,并使用纯Javascript接收它

所以当我发送字符串时,
“login=“+1+”&username=“+username+”&password=“+password使用Ajax一切正常,但是对象呢?在这种情况下,我的PHP代码总是告诉
username
password
是未定义的索引

HTML文档:

<body>
<form id="loginform">
    <input type="text" placeholder="username"  id="username" required autocomplete="off"><br>
    <input type="password" placeholder="password" id="password" required><br>
    <input type="submit" id="submit">
</form>

<script>
        document.getElementById("loginform").addEventListener("submit", function(e) {
            e.preventDefault();

            var username = document.getElementById("username").value;
            var password = document.getElementById("password").value;

            var data = {// ---- there is my Object -----
                login: 1,
                username: username,
                password: password
            }

            var xhr = new XMLHttpRequest();
            xhr.open("POST", "process.php", true);

            xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

            xhr.onload = function() {
                console.log(this.responseText);
            }

            xhr.send(data);
        });
</script>
</body>
<?php
    if(isset($_POST["login"])) {
        $username = $_POST['username'];
        $password = $_POST['password'];
        echo($username . " , " . $password);
    }
?>



document.getElementById(“loginform”).addEventListener(“提交”,函数(e){ e、 预防默认值(); var username=document.getElementById(“用户名”).value; var password=document.getElementById(“密码”).value; var data={/----这是我的对象----- 登入:1,, 用户名:用户名, 密码:密码 } var xhr=new XMLHttpRequest(); open(“POST”,“process.php”,true); setRequestHeader('Content-type','application/x-www-form-urlencoded'); xhr.onload=函数(){ console.log(this.responseText); } 发送(数据); });
PHP文档:

<body>
<form id="loginform">
    <input type="text" placeholder="username"  id="username" required autocomplete="off"><br>
    <input type="password" placeholder="password" id="password" required><br>
    <input type="submit" id="submit">
</form>

<script>
        document.getElementById("loginform").addEventListener("submit", function(e) {
            e.preventDefault();

            var username = document.getElementById("username").value;
            var password = document.getElementById("password").value;

            var data = {// ---- there is my Object -----
                login: 1,
                username: username,
                password: password
            }

            var xhr = new XMLHttpRequest();
            xhr.open("POST", "process.php", true);

            xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

            xhr.onload = function() {
                console.log(this.responseText);
            }

            xhr.send(data);
        });
</script>
</body>
<?php
    if(isset($_POST["login"])) {
        $username = $_POST['username'];
        $password = $_POST['password'];
        echo($username . " , " . $password);
    }
?>

一个物体呢

send()
不希望传递一个普通对象,因此它通过调用其
toString()
方法对其进行转换,该方法将为您提供
“[object object]”
,这显然不是URL编码的数据

PHP不仅不理解它,而且您想要发送的数据一开始就不包含在其中


如果您有一个对象,则需要将其转换为可以在服务器上解码的格式

继续使用表单编码数据是最简单的方法

var数据={
登入:1,,
用户名:“示例”,
密码:“示例”
};
var键值对=[];
Object.keys(数据).forEach(函数(键){
按键\值\按键对(
encodeURIComponent(键)+“=”+encodeURIComponent(数据[键])
);
})
var url_encoded_string=key_value_pairs.join(“&”);
日志(url\u编码的\u字符串)