在 php 中,如何获取 XMLHttpRequest 的 send() 方法的文本/纯文本值
Posted
技术标签:
【中文标题】在 php 中,如何获取 XMLHttpRequest 的 send() 方法的文本/纯文本值【英文标题】:In php, how do I get the text/plain value of send() method of XMLHttpRequest 【发布时间】:2011-11-15 19:55:35 【问题描述】:我不知道如何获得“Hello World!”在 php 中用于以下 javascript 代码。 我知道如果内容类型是“application/x-www-form-urlencoded”,我可以使用 $_POST[''],但不能使用“text/plain”。
var xhr = new XMLHttpRequest();
xhr.open('POST', 'example.php', true);
xhr.setRequestHeader('Content-Type', 'text/plain');
xhr.send('Hello World!');
【问题讨论】:
【参考方案1】:此 PHP 将从请求正文中读取原始数据:
$data = file_get_contents('php://input');
第 3 行:
xhr.setRequestHeader('Content-Type', 'text/plain');
不需要,因为发布纯文本会将内容类型设置为 text/plain;charset=UTF-8http://www.w3.org/TR/XMLHttpRequest/#the-send-method
【讨论】:
虽然我同意“正确”的标准做法是始终正确格式化表单数据,但“php://input”位是一个值得注意的有趣细节。更多信息可以通过网络搜索找到:link 以纯文本形式发送 POST 数据的问题在哪里?我从未读过 HTTP 标准要求 POST 数据为“application/x-www-form-urlencoded”,例如 PHP 和浏览器使用它来进行比 HTTP 高一级的通信【参考方案2】:您的请求存在许多问题。如果不使用application/x-www-form-urlencoded
,您将无法发布数据。其次,“Hello World!”没有转义或附加到变量。
以下是 POST 数据到服务器的 javascript 代码。
var xhr = new XMLHttpRequest();
var params = 'x='+encodeURIComponent("Hello World!");
xhr.open("POST", 'example.php', true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Content-length", params.length);
xhr.setRequestHeader("Connection", "close");
xhr.onreadystatechange = function()
if(xhr.readyState == 4 && xhr.status == 200)
alert(xhr.responseText);
xhr.send(params);
您可以在 PHP 中使用$_POST['x']
访问它。
或者,您可以通过以下代码使用$_GET['x']
。
var xhr = new XMLHttpRequest();
var params = encodeURIComponent("Hello World!");
xhr.open("GET", 'example.php?x='+params, true);
xhr.onreadystatechange = function()
if(xhr.readyState == 4 && xhr.status == 200)
alert(xhr.responseText);
xhr.send(null);
GET更符合使用Content-type: text/plain
的思路。
【讨论】:
这就是我想知道的全部内容 :) 谢谢 @genkidesu:我知道你是新来的。本网站习惯于接受您认为有帮助的答案。否则,人们将更不愿意回答您以后可能遇到的任何问题。 @abc 您应该将 Herbert 回复标记为已接受。您好 Herbert,感谢您的正确陈述,我在 w3school 上的尝试没有成功,与您相比,他们的陈述看起来混乱且不完整(我想知道它是如何工作的)【参考方案3】:你可以试试http_get_request_body
(http://php.net/manual/en/function.http-get-request-body.php)
【讨论】:
以上是关于在 php 中,如何获取 XMLHttpRequest 的 send() 方法的文本/纯文本值的主要内容,如果未能解决你的问题,请参考以下文章
解决Mixed Content: The page at https://* was loaded over HTTPS, but requested an insecure XMLHttpReque