Dart 使用HttpRequest对象以及getString加载Json数据

Dart 使用HttpRequest对象以及getString加载Json数据

Dart 使用HttpRequest 加载

import 'dart:html';
import 'dart:async'; // 数据请求
import 'dart:convert'; // Json 解析

UListElement wordList = querySelector('#wordList');

void main() {
  querySelector('#getWords').onClick.listen(makeRequest);
}

/* 使用HttpRequest 加载
 */
Future<void> makeRequest(Event _) async {
  wordList.children.clear(); // 请求之前清空数组
  const path = 'https://www.dartlang.org/f/portmanteaux.json';
  final httpRequest = HttpRequest();
  httpRequest
    ..open('GET', path)
    ..onLoadEnd.listen((e) => requestComplete(httpRequest))
    ..send();
}
void requestComplete (HttpRequest request) {
  switch (request.status) {
    case 200:
      processResponse(request.responseText);
      return;
    default:
      final li = LIElement()..text = '数据请求失败, status=${request.status}';
      wordList.children.add(li);
  }
}

void processResponse (String jsonString) {
  for (final portmanteau in json.decode(jsonString)) {
    wordList.children.add(LIElement()..text = portmanteau);
  }
}

Dart 使用Get String 加载

import 'dart:html';
import 'dart:async'; // 数据请求
import 'dart:convert'; // Json 解析

UListElement wordList = querySelector('#wordList');

void main() {
  querySelector('#getWords').onClick.listen(makeRequest);
}

/* 使用Get String 加载
 */
Future<void> makeRequest(Event _) async {

  const path = 'https://www.dartlang.org/f/portmanteaux.json';

  try {
    //发起GET 请求
    final jsonString = await HttpRequest.getString(path);
    // 请求成功,处理Json
    processResponse(jsonString);
  } catch (e) {
    // GET请求失败, 处理错误
    print('不能打开 $path');
    wordList.children.add(LIElement()..text = '数据请求失败');
  }
}

共用HTML 数据展示页面

  <div>
      <h1>请求Json数据</h1>
      <button id="getWords">请求数据</button>
      <ul id="wordList"></ul>
  </div>