'xmlhttp.setRequestHeader();'是什么,它在哪些情况下被使用?

19

学习 AJAX 时,我偶然发现了这个命令。教程的作者没有解释这个命令,想请问这个命令中的参数是什么意思,以及它的用途是什么...以下是我使用它的代码:

<script type="text/javascript">

        function insert(){
            if(window.XMLHttpRequest){
                xmlhttp = new XMLHttpRequest();
            }else{
                xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
            };

            xmlhttp.onreadystatechange = function(){
                if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
                    document.getElementById('message').innerHTML = xmlhttp.responseText;
                };  
            };

            parameters = 'insert_text='+document.getElementById('insert_text').value;

            xmlhttp.open('POST','ajax_posting_data.php',true);
            xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
            xmlhttp.send(parameters);
        };

    </script>

3
文档在这里:http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method - talnicolas
@talnicolas:向一个人发送来自 W3.org 的干燥正式文件来解释某个过程的含义和目的是相当无用的。 - Trunk
4个回答

22

HTTP是一种协议。协议的一部分是请求头的概念。当发生xhr时,客户端和服务器之间会交换文本。请求头是客户端发送到服务器的文本的一部分。

这是设置请求头的方法。你看到的参数是:

1)要设置的头(在本例中为Content-type
2)头的值(在本例中为x-www-form-urlencoded

更多信息请参见此处。


我知道什么是requestHeaders,但当我需要在一个没有jQuery的应用程序中插入请求头时,我确实发现这个例子很有用。 - gregturn

9
HTTP请求是根据一组常规流程(“协议”——此处为超文本传输协议)从一个计算机系统传递到另一个计算机系统的消息,以执行发送数据、请求发送回来的数据、更新先前发送的数据等操作。
头部基本上是有关HTTP请求正文中数据的信息。它的目的是告诉接收请求的机器请求正文中封装的数据类型、格式、语言、是否设置Cookie、日期、主机等。
可以在HTTP请求上放置多个头部,每个头部都有“名称”和“值”组件。在网页上,它们看起来像。
<meta name="........" content="............."/>

你可以在网页顶部下方的元素中找到它们。

为了让人们能够从JavaScript函数内发送HTTP请求,我们创建一个新的XMLHttpRequest对象,就像你的代码所做的那样

const xmlhttp = new XMLHttpRequest();

你打算向这个新的空对象添加数据。尽管它的名字是XMLHttpRequest,但它也允许以多种格式发送数据,例如HTML代码、文本、JSON等。在你的示例中,每个数据名称将由"="字符与其值分隔开,每个数据/值对将由"&"字符与下一个配对分隔开。这种格式称为URL编码。
我们必须告诉接收计算机HTTP请求体内的数据如何编码。有一个标准头部来传达这一点,并通过方法setRequestHeader(..)添加到请求中。此方法使用2个参数,头部名称和头部的值。所有这些操作都在一行中完成。
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

在请求使用open(...)方法进行特征化之后,但在使用send(.)方法发送最终请求之前,必须应用此setRequestHeader(..)方法。

open(...)方法定义了:(1) HTTP 请求的类型,例如 GET/POST/PUT 等;(2) 包含处理该请求的脚本的网页,例如某个 .php 文件或 Node.js 请求端点,该端点会对后端数据库进行适当的查询;以及 (3) 请求动态的性质,例如异步请求分配一个值“true”,同步请求分配“false”。

send(.)方法将要发送的数据附加到请求的正文中,在您的情况下,变量名为“parameters”。

关于您更广泛的问题,即在哪些情况下使用setRequestHeader(..),我会说它在大多数 HTTP 请求情况下都会使用。但是一些类型的数据添加到 HTTP 请求正文中会调用“Content-Type”头的默认设置。


3

这正是它所说的。它将为下一个XMLHttpRequest设置“header”信息。

Header基本上是一个键值对。它用于向目标服务器传输有关正在进行的请求的“元”信息。在您特定的实例中,它被用来告诉服务器此请求使用哪种内容类型。


1
如果发帖人已经清楚知道XHR、标头和元信息是什么,那么这个答案才有价值。但如果他们已经理解了这些概念,他们几乎不会问这个问题。 - Trunk

0

它将Content-type HTTP头设置为包含从表单发送的url编码数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接