XMLHttpRequest和AJAX
XMLHttpRequest(以下简称为“XHR”)中文可以解释为“可扩展超文本传输请求”,Xml可扩展标记语言,Http超文本传输协议,Request请求。XMLHttpRequest对象是“异步JavaScript和XML”(Asynchronous Javascript And XML)——AJAX实现的核心。
mui.ajax()中的XHR
mui.ajax()中的XHR对象有两种:
window.XMLHttpRequest
5+XMLHttpRequest
异步/同步
AJAX最大的优点就是异步,但是在某些情况下依旧需要进行同步的请求。window的XHR是支持同步的,但是5+的XHR并不支持。也就是说,当使用window的XHR时,可以通过设置async属性来调整异步/同步。
mui.ajax({
url: 'http://192.168.0.101:8080/test'
data: {},
async: true || false, // 异步 || 同步
dataType: 'json',
type: 'post',
timeout: 10000,
success: function(data) {
// 请求成功
},
error: function(xhr, type, errorThrown) {
// 请求失败
}
});
关于mui.ajax()的使用,在其API中已经做出了较为全面的说明,这里主要说明mui.ajax()对两种XHR在不同场景下的使用。
5+运行环境
在5+运行环境下,才可以调用plus相关的API,可以使用5+的XHR。
5+运行环境目前有:5+App、流应用基座、360手机助手。
crossDomain
mui.ajax()配置信息的settings中有个参数crossDomain,说明为“强制使用5+跨域”,此时使用5+的XHR。
mui.ajax({
url: 'http://192.168.0.101:8080/test'
data: {},
async: true,
dataType: 'json',
crossDomain: true, //强制使用5+跨域
type: 'post',
timeout: 10000,
success: function(data) {
// 请求成功
},
error: function(xhr, type, errorThrown) {
// 请求失败
}
});
跨域请求
5+默认采用UIWebview,是支持本地资源跨域请求的。即,此时会调用window的XHR。
当然,你也可以设置crossDomain为true,强制使用5+XHR。
WKWebview
5+的webview在创建的时候,可以设置窗口使用的内核,但是只能在iOS8.0及以上系统中使用。
WKWebview出于安全的设计,不支持window的XHR跨域。所以当使用WKWebview时,始终调用5+的XHR。
其他
除了上述提到的场景,mui.ajax()均会调用window的XHR。
手机浏览器环境
浏览器环境,一定使用的是window的XHR。
关于微信等浏览器环境开发中的跨域,请参考mui.getJSONP()实现Web跨域。
5 个评论
要回复文章请先登录或注册
IceDew
lifeng_dev
小莫骚麦
7***@qq.com
w***@163.com