使用ajax将数据发布到本地服务器,无法设置请求名称

koz*_*ozi 1 javascript php ajax

我已经创建了一个发送到我的PHP服务器的AJAX请求:

var xml = new XMLHttpRequest();
xml.open("POST", "question.php", true);
xml.setRequestHeader('question','test');
xml.send();
Run Code Online (Sandbox Code Playgroud)

在PHP中,我正在尝试接收AJAX数据,但不幸的是,它无法正常工作.

$qst = $_POST['question'];
return $qst;
Run Code Online (Sandbox Code Playgroud)

我是否在使用AJAX请求时出错?如何正确设置POST变量的名称?我猜这就是问题所在.

Que*_*tin 5

您有三个问题阻止您的代码工作.

您将数据放在错误的位置

POST数据在HTTP请求的正文中发送,而不是标头.

使用FormData对象最容易实现.(您还可以手动设置Content-Type请求标头和格式化数据,但FormData使您不必考虑所有这些).

 var data = new FormData();
 data.append("question", "test");

 var xml = new XMLHttpRequest();
 xml.open("POST", "question.php", true);
 xml.send(data);
Run Code Online (Sandbox Code Playgroud)

你没有看到回应

好.您可能正在浏览器中的Developer Tools的Network选项卡中查看响应,但我猜您不是.

 xml.addEventListener("load", examine_response);

 function examine_response() {
     alert(this.responseText);
 }
Run Code Online (Sandbox Code Playgroud)

你的PHP没有输出任何东西

return 用于将函数中的数据传递回任何调用它的数据.

它不会将任何内容输出回浏览器.你需要echo或类似的.

$qst = $_POST['question'];
print $qst;
Run Code Online (Sandbox Code Playgroud)

奖金问题:安全漏洞!

您的代码容易受到XSS攻击.您不得在HTML文档中回显用户输入而不转义它.

由于您尝试发送纯文本,请告诉浏览器它是纯文本文档(PHP默认为它是HTML):

header("Content-Type: text/plain");
$qst = $_POST['question'];
print $qst;
Run Code Online (Sandbox Code Playgroud)