--- title: XMLHttpRequest.send() slug: Web/API/XMLHttpRequest/send tags: - AJAX - API - HTTP request - Method - XHR - XMLHttpRequest - send translation_of: Web/API/XMLHttpRequest/send ---

{{APIRef('XMLHttpRequest')}}

XMLHttpRequest.send() 方法用于发送 HTTP 请求。如果是异步请求(默认为异步请求),则此方法会在请求发送后立即返回;如果是同步请求,则此方法直到响应到达后才会返回。XMLHttpRequest.send() 方法接受一个可选的参数,其作为请求主体;如果请求方法是 GET 或者 HEAD,则应将请求主体设置为 null。

如果没有使用 {{domxref("XMLHttpRequest.setRequestHeader", "setRequestHeader()")}} 方法设置 {{HTTPHeader("Accept")}} 头部信息,则会发送带有 "* / *" 的{{HTTPHeader("Accept")}} 头部。

Note: 请注意不要使用一个简单的AarryBuffer对象作为参数,ArrayBuffer已经不再是ajax规范的一部分,请改用ArrayBufferView(有关信息请参考兼容性列表。)

语法

XMLHttpRequest.send(body)

参数

body {{optional_inline}}
在XHR请求中要发送的数据体. 可以是: 如果body没有指定值,则默认值为 null .

返回值

undefined.

 例外

Exception Description
InvalidStateError send() has already been invoked for the request, and/or the request is complete.
NetworkError The resource type to be fetched is a Blob, and the method is not GET.
XMLHttpRequest.send();
XMLHttpRequest.send(ArrayBuffer data);
XMLHttpRequest.send(ArrayBufferView data);
XMLHttpRequest.send(Blob data);
XMLHttpRequest.send(Document data);
XMLHttpRequest.send(DOMString? data);
XMLHttpRequest.send(FormData data);

如果发送的数据是Document对象,需要在发送之前将其序列化。当发送一个Document对象时,Firefox 3之前的版本都是使用utf-8编码发送请求的;FireFox 3则使用由body.xmlEncoding指定的编码格式正确的发送文档,但如果未指定编码格式,则使用utf-8编码格式发送。

如果是一个nsIInputStream接口,它必须与nsIUploadChannel的setUploadStream()方法兼容。在这种情况下,将 Content-Length的头部添加到请求中,它的值则使用nsIInputStream接口的available()方法获取。任何报头包括在数据流顶部的都会被当做报文主体。所以,应该在发送请求即调用send()方法之前使用setRequestHeader() 方法设置 Content-Type头部来指定数据流的MIME类型。

发送二进制内容的最佳方法(如上传文件)是使用一个与send()方法结合的 ArrayBufferView 或者Blobs

案例: GET

var xhr = new XMLHttpRequest();
xhr.open('GET', '/server', true);

xhr.onload = function () {
   // 请求结束后,在此处写处理代码
};

xhr.send(null);
// xhr.send('string');
// xhr.send(new Blob());
// xhr.send(new Int8Array());
// xhr.send({ form: 'data' });
// xhr.send(document);

案例: POST

var xhr = new XMLHttpRequest();
xhr.open("POST", '/server', true);

//发送合适的请求头信息
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xhr.onload = function () {
    // 请求结束后,在此处写处理代码
};
xhr.send("foo=bar&lorem=ipsum");
// xhr.send('string');
// xhr.send(new Blob());
// xhr.send(new Int8Array());
// xhr.send({ form: 'data' });
// xhr.send(document);

规范

规范 状态 注解
{{SpecName('XMLHttpRequest', '#the-send()-method', 'send()')}} {{Spec2('XMLHttpRequest')}} WHATWG living standard

浏览器兼容性

{{CompatibilityTable}}
特点 Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
基本支持 {{CompatChrome(1)}} {{CompatGeckoDesktop("1.0")}} {{CompatIe('5')}}[2]
{{CompatIe('7')}}
{{CompatVersionUnknown}} {{CompatSafari('1.2')}}
send(ArrayBuffer) {{CompatChrome(9)}} {{CompatGeckoDesktop("9.0")}}[1] {{CompatIe('10')}} {{CompatOpera('11.60')}} {{compatUnknown}}
send(ArrayBufferView) {{CompatChrome(22)}} {{CompatGeckoDesktop("20.0")}} {{compatUnknown}} {{compatUnknown}} {{compatUnknown}}
send(Blob) {{CompatChrome(7)}} {{CompatGeckoDesktop("1.9.2")}} {{CompatIe('10')}} {{CompatOpera('12')}} {{compatUnknown}}
send(FormData) {{CompatChrome(6)}} {{CompatGeckoDesktop("2.0")}} {{CompatIe('10')}} {{CompatOpera('12')}} {{compatUnknown}}
特点 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本支持 {{CompatUnknown}} 1.0 {{CompatVersionUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}
send(ArrayBuffer) {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{compatUnknown}}
send(ArrayBufferView) {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{compatUnknown}}
send(Blob) {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{compatUnknown}}
send(FormData) {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{compatUnknown}}

[1] 发送一个简单的ArrayBuffer对象已不再是ajax规范一部分,也已经被弃用了。请使用 已被加入Gecko 20.0 {{geckoRelease("20.0")}}的ArrayBufferView

[2] 由于 Internet Explorer 7实现了标准的XMLHttpRequest,此功能通过ActiveXObject()实现。

参见