使用Ajax发送Javascript对象时未定义的数据
假设我试图向PHP发送一个数据,并使用纯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
“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字符串)代码>