Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
Javascript 无法使用post方法在AJAX调用中发送数据_Javascript_Php - Fatal编程技术网

Javascript 无法使用post方法在AJAX调用中发送数据

Javascript 无法使用post方法在AJAX调用中发送数据,javascript,php,Javascript,Php,这是我的代码,它非常简单,工作非常完美: var r = new XMLHttpRequest(); var name='KillerSeba'; r.open("GET","../Serve/servepage.php?name="+name,true); r.onreadystatechange = function () { if (r.readyState != 4 || r.status != 200) return; alert("Success: " + r.respons

这是我的代码,它非常简单,工作非常完美:

var r = new XMLHttpRequest();
var name='KillerSeba';
r.open("GET","../Serve/servepage.php?name="+name,true);
r.onreadystatechange = function () {
  if (r.readyState != 4 || r.status != 200) return;
  alert("Success: " + r.responseText);
};
r.send();
此代码仅在页面加载时发送警报“Success:KillerSeba”。我回答请求的php文件看起来有点:

<?php
$s=$_REQUEST['name'];
echo $s;
?>
但现在脚本并没有向php文件发送任何数据,因为我只收到“Success:”警报。杀手会消散到某个地方。我尝试在send()函数中使用“name”和“name”代替name,我尝试用$\u POST替换$\u请求,但仍然没有帮助。所以我的问题是:如何使用POST方法在AJAX请求中发送数据?这个send()函数是如何工作的?
另外,我更喜欢只使用Vanilla JS框架。

您发送的是

名称
,但没有任何变量名(它被认为是没有任何值的变量名)

更改您的
r.send(名称)
to
r.send('name='+name)

有关更多信息,请查看

编辑:感谢您的提示,当然您需要在发送请求之前设置正确的标题:

r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

您正在发送
name
,但没有任何变量名(它被视为没有任何值的变量名)

更改您的
r.send(名称)
to
r.send('name='+name)

有关更多信息,请查看

编辑:感谢您的提示,当然您需要在发送请求之前设置正确的标题:

r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

当您以字符串形式发送名称时,没有任何参数名称,这就是为什么它不适用于
POST
方法,但当您使用
GET
发送时,您将该名称与url连接在一起。现在,您必须以与使用GET方法发送相同的方式传递参数。像这样尝试一下,我只是将名称包装到一个名为
params
的变量中,该变量包含
params='name='+name
所以您必须使用
r.send(参数)
发送它。请参见此处的示例以了解和


当您以字符串形式发送名称时,没有任何参数名称,这就是为什么它不适用于
POST
方法,但当您使用
GET
发送时,您将该名称与url连接在一起。现在,您必须以与使用GET方法发送相同的方式传递参数。像这样尝试一下,我只是将名称包装到一个名为
params
的变量中,该变量包含
params='name='+name
所以您必须使用
r.send(参数)
发送它。请参见此处的示例以了解和


非常感谢,现在它工作正常了,但只是因为我添加了r.setRequestHeader(“Content-Type”,“application/x-www-form-urlencoded”);编码。标题也必须发送;没有它它就无法工作是的,你必须添加
内容类型
标题,我只是错过了在我的回答中添加它。非常感谢,现在它工作正常,但只是因为我添加了r.setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);编码。标题也必须发送;没有它是不行的。是的,你必须添加
内容类型
标题,我只是错过了在我的回答中添加它。谢谢文档,我已经阅读了使用POST方法时需要发送的标题。和变量值,感谢文档,我已经阅读了使用POST方法时需要发送的标题。和变量值,ofc
var r = new XMLHttpRequest();
var name='KillerSeba';
r.open("POST","../Serve/servepage.php",true);
//Send the proper header information along with the request
r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
r.onreadystatechange = function () {
  if (r.readyState != 4 || r.status != 200) return;
  alert("Success: " + r.responseText);
};
params = 'name='+name;
r.send(params);