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

时间:2012-01-16 16:00:43

标签: javascript ajax http request-headers

在学习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>

4 个答案:

答案 0 :(得分:19)

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

这是一种设置请求标头的方法。你看到的论点是

1)要设置的标头(在这种情况下,内容类型
2)标头值。 (在这种情况下, x-www-form-urlencoded

See this for more info.

答案 1 :(得分:3)

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

标题几乎是一个键/值对。它用于将“元”信息传输到目标服务器以用于正在进行的请求。在您的特定实例中,它用于告诉服务器该请求使用了哪种内容类型。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

HTTP请求是根据设置的例程(一个“协议”,此处为 H yper T ext T strong>转让 P rotocol)以执行诸如发送数据,要求将数据发送回,更新先前发送的数据等操作。

标头基本上是有关HTTP请求正文中数据的一条信息。其目的是告诉接收请求的计算机在请求的主体中包含什么类型的数据,其格式,使用的语言,是否要设置cookie,日期,主机等。

一个HTTP请求上可以放置多个标头,并且每个标头都有一个“名称”和一个“值”组件。在网页上,它们看起来像

<meta name="........" content="............."/>

,您会在元素顶部的网页下方找到它们。

为使人们能够从JavaScript函数中发送HTTP请求,我们创建了一个新的XMLHttpRequest对象,就像您的代码使用

一样。
xmlhttp = new XMLHttpRequest();

您打算向这个新的空对象添加数据。尽管具有名称,XMLHttpRequest还允许以XML以外的多种格式发送数据,例如HTML代码,文本,JSON等。在您的示例中,每个数据名称都将以“ =”字符与其值分开,并且每个数据/值对将以“&”字符与下一个配对分开。这种格式称为URL编码。

我们必须告诉接收计算机如何对HTTP请求正文中的数据进行编码。有一个standard header来传达此信息,并通过 setRequestHeader(..)方法将其添加到请求中。此方法使用2个参数,标题名称和标题的值。所有这些操作都是在

行中完成的
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

setRequestHeader(..)方法必须在之后应用于请求,并以 open(...)为特征方法,但之前之前,最终请求是使用 send(。)方法发送的。

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

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

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