XMLHttpRequest

XMLHttpRequest

使用XMLHttpRequest (XHR)对象可以与服务器交互。您可以从URL获取数据,而无需让整个的页面刷新。这使得Web页面可以只更新页面的局部,而不影响用户的操作。XMLHttpRequest在 Ajax 编程中被大量使用。

onreadystatechange 事件

只要 readyState 属性发生变化,就会调用相应的处理函数。这个回调函数会被用户线程所调用。XMLHttpRequest.onreadystatechange 会在 XMLHttpRequest 的readyState 属性发生改变时触发 readystatechange 事件的时候被调用。

  • 属性

XMLHttpRequest.onreadystatechange
当readyState属性发生变化时调用的EventHandler。

XMLHttpRequest.readyState 只读
返回 一个unsigned short 即无符号短整型,请求的状态码。

状态 描述
0 UNSENT 代理被创建,但尚未调用 open() 方法。
1 OPENED open() 方法已经被调用。
2 HEADERS_RECEIVED send() 方法已经被调用,并且头部和状态已经可获得。
3 LOADING 下载中; responseText 属性已经包含部分数据。
4 DONE 下载操作已完成。

XMLHttpRequest.response 只读
返回ArrayBuffer、Blob、Document、DOMString,具体是哪种类型取决于XMLHttpRequest.responseType的值。其中包含响应体body。

XMLHttpRequest.responseText 只读
返回一个DOMString,该DOMString包含对请求的响应,如果请求未成功或尚未发送,则返回null。

XMLHttpRequest.responseType
定义响应类型的枚举值。

描述
“” 将 responseType 设为空字符串与设置为"text"相同, 是默认类型 (实际上是 DOMString)。
“arraybuffer” response 是一个包含二进制数据的 JavaScript ArrayBuffer 。
“blob” response 是一个包含二进制数据的 Blob 对象 。
“document” response 是一个 HTML Document 或 XML XMLDocument ,这取决于接收到的数据的 MIME 类型。请参阅 HTML in XMLHttpRequest 以了解使用 XHR 获取 HTML 内容的更多信息。
“json” response 是一个 JavaScript 对象。这个对象是通过将接收到的数据类型视为 JSON 解析得到的。
“text” response 是包含在 DOMString 对象中的文本。
“moz-chunked-arraybuffer” 与"arraybuffer"相似,但是数据会被接收到一个流中。使用此响应类型时,响应中的值仅在 progress 事件的处理程序中可用,并且只包含上一次响应 progress 事件以后收到的数据,而不是自请求发送以来收到的所有数据。在 progress 事件处理时访问 response 将返回到目前为止收到的数据。在 progress 事件处理程序之外访问, response 的值会始终为 null 。
“ms-stream” response 是下载流的一部分;此响应类型仅允许下载请求,并且仅受Internet Explorer支持。

XMLHttpRequest.responseURL 只读
返回响应的序列化URL,如果URL为空,则返回空字符串。

XMLHttpRequest.responseXML 只读
返回一个Document,其中包含该请求的响应,如果请求未成功、尚未发送或不能解析为XML或HTML,则返回null。

XMLHttpRequest.status 只读
返回 unsigned short 即无符号短整型请求响应状态。

XMLHttpRequest.statusText 只读
返回一个DOMString},其中包含HTTP服务器返回的响应状态。与 XMLHTTPRequest.status不同的是,它包括响应状态的整个文本(例如,“200 OK”)。

XMLHttpRequest.timeout
unsigned long 即无符号长整型,表示该请求的最大请求时间(毫秒),超过该时间请求会自动结束。

XMLHttpRequestEventTarget.ontimeout
当请求超时调用的EventHandler。

XMLHttpRequest.upload 只读
XMLHttpRequestUpload,表示上传过程。
可以被绑定在upload对象上的事件监听器如下:

事件 相应属性的信息类型
onloadstart 获取开始
onprogress 数据传输进行中
onabort 获取操作终止
onerror 获取失败
onload 获取成功
ontimeout 获取操作在用户规定的时间内未完成
onloadend 获取完成(不论成功与否)

XMLHttpRequest.withCredentials
Boolean,用来指定跨域的请求是否应该使用证书(如cookie或授权header头)。

XMLHttpRequest.channel 只读
nsIChannel,对象在执行请求时使用的通道。

XMLHttpRequest.mozAnon 只读
一个布尔值,如果为真,请求将在没有cookie和身份验证header头的情况下发送。

XMLHttpRequest.mozSystem 只读
一个布尔值,如果为真,则在请求时不会强制执行同源策略。

XMLHttpRequest.mozBackgroundRequest
一个布尔值,它指示对象是否是后台服务器端的请求

  • 方法

XMLHttpRequest.abort()
如果请求已经被发送,则立刻中止请求.

XMLHttpRequest.getAllResponseHeaders()
以字符串的形式返回所有用CRLF分隔的响应头,如果没有收到响应,则返回null。

XMLHttpRequest.getResponseHeader(header)
返回包含指定响应头的字符串,如果响应尚未收到或响应中不存在该报头,则返回null。

XMLHttpRequest.open(method, url, async, user, password)
初始化一个请求。该方法只能JavaScript代码中使用,若要在native code中初始化请求,请使用openRequest()。
参数:

参数 描述
method 要使用的HTTP方法,比如「GET」、「POST」、「PUT」、「DELETE」、等。对于非HTTP(S) URL被忽略。
url 一个DOMString表示要向其发送请求的URL。
async 可选 一个可选的布尔参数,默认为true,表示要不要异步执行操作。如果值为false,send()方法直到收到答复前不会返回。如果true,已完成事务的通知可供事件监听器使用。如果multipart属性为true则这个必须为true,否则将引发异常。注意:从Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27)开始,由于对用户体验的负面影响,主线程上的同步请求已不赞成。
user 可选 可选的用户名用于认证用途;默认为null。
password 可选 可选的密码用于认证用途,默认为null。

XMLHttpRequest.overrideMimeType('text/plain; charset=x-user-defined')
重写由服务器返回的MIME type。

XMLHttpRequest.send()
发送请求。如果请求是异步的(默认),那么该方法将在请求发送后立即返回。

XMLHttpRequest.setRequestHeader(header, value)
设置HTTP请求头的值。您必须在open()之后、send()之前调用setRequestHeader()这个方法。

XMLHttpRequest.sendAsBinary()
send()方法的变体,用来发送二进制数据。

  • 示列
var url = "";
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = "blob";
xhr.setRequestHeader("client_type", "DESKTOP_WEB");
xhr.setRequestHeader("desktop_web_access_key", _desktop_web_access_key);
xhr.onreadystatechange = function() {
	if (this.status == 200) {
		var blob = this.response;
		var img = document.createElement("img");
		img.onload = function(e) {
			window.URL.revokeObjectURL(img.src); 
		}
		img.src = window.URL.createObjectURL(blob);
		$("#imgcontainer").html(img);    
	}
}
xhr.send();

你可能感兴趣的:(前端)