dart系列之浏览器中的舞者,用dart发送HTTP请求
简介
dart:html包为dart提供了构建浏览器客户端的一些必须的组件,之前我们提到了HTML和DOM的操作,除了这些之外,我们在浏览器端另一个常用的操作就是使用XMLHttpRequest去做异步HTTP资源的请求,也就是AJAX请求。
dart同样提供了类似JS中XMLHttpRequest的封装,其对应的类叫做HttpRequest,一起来看看在dart中怎么使用HttpRequest吧。 发送GET请求
虽然现代的web APP被各种框架所封装,但是归根结底他还是一个AJAX的富客户端应用。我们通过各种异步的HTTP请求向服务器端请求数据,然后展示在页面上。一般来说数据的交互格式是JSON,当然也可以有其他的数据交互格式。
AJAX中最常用的方式就是向服务器端发送get请求,对应的HttpRequest有一个getString方法: static Future getString(String url, {bool? withCredentials, void onProgress(ProgressEvent e)?}) { return request(url, withCredentials: withCredentials, onProgress: onProgress) .then((HttpRequest xhr) => xhr.responseText!); }
注意,getString方法是一个类方法,所以直接使用HttpRequest类来调用: var name = Uri.encodeQueryComponent("John"); var id = Uri.encodeQueryComponent("42"); HttpRequest.getString("users.json?name=name&id=id") .then((String resp) { // Do something with the response. });
因为getString返回的是一个Future,所以可以直接在getString后面接then语句,来获取返回的值。
当然,你也可以在async方法中使用await来获取返回值。 Future main() async { String pageHtml = await HttpRequest.getString(url); // Do something with pageHtml... }
或者使用try catch来捕获异常: try { var data = await HttpRequest.getString(jsonUri); // Process data... } catch (e) { // Handle exception... } 发送post请求
GET是从服务器拉取数据,相应的POST就是通用的向服务器中提交数据的方法。在HttpRequest中,对应的方法是postFormData: static Future postFormData(String url, Map data, {bool? withCredentials, String? responseType, Map? requestHeaders, void onProgress(ProgressEvent e)?}) { var parts = []; data.forEach((key, value) { parts.add("{Uri.encodeQueryComponent(key)}=" "{Uri.encodeQueryComponent(value)}"); }); var formData = parts.join("&"); if (requestHeaders == null) { requestHeaders = {}; } requestHeaders.putIfAbsent("Content-Type", () => "application/x-www-form-urlencoded; charset=UTF-8"); return request(url, method: "POST", withCredentials: withCredentials, responseType: responseType, requestHeaders: requestHeaders, sendData: formData, onProgress: onProgress); }
从方法的实现上可以看到,默认情况下使用的Content-Type: application/x-www-form-urlencoded; charset=UTF-8, 也就是说默认是以form表单提交的形式进行的。
在这种情况下,对于承载数据的data来说,会首先进行Uri.encodeQueryComponent进行编码,然后再使用&进行连接。
下面是使用的例子: var data = { "firstName" : "John", "lastName" : "Doe" }; HttpRequest.postFormData("/send", data).then((HttpRequest resp) { // Do something with the response. });
注意,postFormData中返回的是一个HttpRequest,虽然它叫做Request,但是实际上可以包含response的内容。所以直接使用他获取返回内容即可。 更加通用的操作
上面我们讲解了get和form的post,从代码可以看到,他们底层实际上都调用的是request方法。request是一个更加通用的HTTP请求方法。可以支持 POST ,PUT ,DELETE 等HTTP操作。下面是request的方法定义: static Future request(String url, {String? method, bool? withCredentials, String? responseType, String? mimeType, Map? requestHeaders, sendData, void onProgress(ProgressEvent e)?})
其中sendData可以是[ByteBuffer],[Blob], [Document], [String], 或者 [FormData] 等格式。
responseType表示的是HttpRequest.responseType,是返回对象的格式,默认情况下是String,也可以是’arraybuffer’, ‘blob’, ‘document’, ‘json’, 或者 ‘text’。
下面是一个是直接使用request的例子: var myForm = querySelector("form#myForm"); var data = new FormData(myForm); HttpRequest.request("/submit", method: "POST", sendData: data) .then((HttpRequest resp) { // Do something with the response. }); 总结
使用HttpRequest可以直接模拟浏览器中的Ajax操作,非常方便。 本文已收录于 http://www.flydean.com/21-dart-http/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
转载!娱乐圈将会成为真正文化自信的一部分!大快人心本文转载新华社北京9月2日电中央宣传部印发通知,部署文娱领域综合治理工作以下是转载的内容新华社北京9月2日电针对流量至上饭圈乱象违法失德等文娱领域出现的问题,中央宣传部近日印发关于
阿里正义被伸张,饭圈治理见成效本文所有观点仅代表作者个人意见同时本文作者对此文具有最终解释权。8月初的时候,发表类似的文章,连续十几天都通不过审核,也不知道为啥?最近,阿里巴巴的曾经的员工,现在被解雇的话题人物
同类大学,意外之后,不同处理本文所有观点仅代表作者个人意见同时本文作者对此文具有最终解释权。最近十几天大学校园才开学之际热闹不断,前有兰州大学在校研究生在宿舍遇刺意外身故,后有前几天,对外经济贸易大学在校保研
WEY玛奇朵诠释传承与创新日前,新一代混动SUVWEY玛奇朵正式发布官图,预示着WEY品牌智能混动时代即将到来。玛奇朵基于WEY品牌家族先锋张力美学概念,塑造未来科技感,同时又以敏锐青春的产品设计理念标签,
不只做网红爆款更要做汽车圈的长红每一个品牌的出现,都曾被厂家寄予厚望,但像坦克这样承载了所有用户期待的品牌却并不多见。从首款车型上市,到品牌正式独立,坦克品牌仅用了五个月的时间,就创造了上市即巅峰的行业里程碑,以
WEY玛奇朵诠释传承与创新日前,新一代混动SUVWEY玛奇朵正式发布官图,预示着WEY品牌智能混动时代即将到来。玛奇朵基于WEY品牌家族先锋张力美学概念,塑造未来科技感,同时又以敏锐青春的产品设计理念标签,
不只做网红爆款更要做汽车圈的长红每一个品牌的出现,都曾被厂家寄予厚望,但像坦克这样承载了所有用户期待的品牌却并不多见。从首款车型上市,到品牌正式独立,坦克品牌仅用了五个月的时间,就创造了上市即巅峰的行业里程碑,以
一封寄给的信这篇写给今日头条的的公开信,不知道能不能发表,只是单纯地翻看头条视频时,有些许感慨,想说给头条听听。9月5是中华慈善日,不知道有多少人知道这个节日,今天早上刷视频,看见一个勇敢的残
高阶自动驾驶的量产车型摩卡预售17。984月19日,WEY品牌全球代言人WEY摩卡首席智能体验官姚安娜,空降上海车展智动WEY来摩卡专属日,携手全球首款智能汽车人WEY摩卡,为现场粉丝呈现了车展史上自动驾驶走秀,书写了其
这鹰熬了4年没结果,华硕STRIXCLAW鼠标拆解大概在4年前,也就是2015年,华硕推出了STRIX猛禽系列,除了显卡主板之外,它的游戏外设系列(机械键盘鼠标耳机)也是格外的引人注意。大概是因为它的基于猫头鹰的强烈仿生学设计,带
99g双模游戏鼠标,达尔优中国风鼠年特别版EM915Pro今年的春节来得早,我们感觉很多东西没来得及到手快递就停运了,包括下面这个。达尔优在2020春节前发布了一款鼠年特别版的鼠标,估计受到当前新冠病毒疫情的影响没办法在年后迅速升温,但产