startWebRequest(url, callback) 发送网络请求

功能分类: Data Applab JavaScript 少儿编程

向指定的 url 发送网络请求,并将请求结果在指定的 callback 回调函数里异步进行处理。

APP 应用并不限于处理应用自己收集或生产的数据。也可以通过向很多提供数据服务的网站发送请求并获取数据。在 Applab 里可以使用 startWebRequest() 方法来向指定的 Web 服务链接发送数据请求,并处理返回数据结果。

指定 callback 回调函数,需要接受返回的三个参数:

  • 请求返回状态(成功或失败),在这里 HTTP status codes 可以查看所有可能的状态码及其解释。
  • 请求返回数据类型(如:文本、图片等)。
  • JSON 格式的请求返回数据本身。

示例代码



var query = encodeURI('select * from weather.forecast where location="98101"');
var url = "https://query.yahooapis.com/v1/public/yql?q=" + query+"&format=json";
startWebRequest(url, function(status, type, content) {
  console.log(status);
  console.log(type);
  console.log(content);
});

示例代码:天气预报 获取天气预报信息并输出到控制台。


// 获取天气预报信息并输出到控制台。
var query = encodeURI('select wind from weather.forecast where location="98101"');
var url = "https://query.yahooapis.com/v1/public/yql?q=" + query+"&format=json";
startWebRequest(url, function(status, type, content) {
  if(status == 200) {
    var contentJson = JSON.parse(content);
    var chill = contentJson.query.results.channel.wind.chill;
    var direction = contentJson.query.results.channel.wind.direction;
    var speed = contentJson.query.results.channel.wind.speed;
    console.log("The current wind chill in Seattle is " + chill + " and caused by a " + speed + "mph wind from " + direction + " degrees direction.");
  } else {
    console.log("The weather service is not available!");
  }
});

示例代码:天气预报 在上面代码基础上增加页面控件,这样就可以获取任何城市的天气预报信息。


// 在上面代码基础上增加页面控件,这样就可以获取任何城市的天气预报信息。
textLabel("instruction", "Type a zip code:");
textInput("zip", "");
textLabel("output", "");

onEvent("zip", "change", function() {
  var query = encodeURI('select astronomy from weather.forecast where location="' + getText("zip") +'"');
  var url = "https://query.yahooapis.com/v1/public/yql?q=" + query+"&format=json";
  startWebRequest(url, function(status, type, content) {
    if(status == 200) {
      var contentJson = JSON.parse(content);
      var sunrise = contentJson.query.results.channel.astronomy.sunrise;
      var sunset = contentJson.query.results.channel.astronomy.sunset;
      setText("output", "Zip Code:" + getText("zip") + " Sunrise:" + sunrise + " Sunset:" + sunset);      
    } else {
      setText("output", "The weather service is not available!");      
    }
  });
});

语法规则


startWebRequest(url, function(status, type, content) {
  //回调函数代码
});

参数说明

名称 类型 必需 参数描述
url string Yes 指定请求服务地址链接。
callback function Yes 请求结束后异步调用的回调函数。三个返回参数会传递给回调函数。

返回值

没有返回值。但当 startWebRequest() 结束后,会异步调用执行指定的 callback 函数。

提示说明

  • startWebRequest() 有一个异步 callback 回调函数,是因为发送网络请求之后不会立刻获得请求结果。通过使用异步回调函数,主代码无需等待。请求结果返回后在这个回调函数里异步处理。
  • callback 回调函数可以是一个内联函数,也可以是在应用程序中单独定义并被 startWebRequest() 调用的函数。
  • 通常不要将包含异步调用的函数如:startWebRequest() ,放在循环里执行。因为循环里不会等异步调用结束才继续执行。
  • 为了在回调函数中编写代码来处理请求返回结果,需要知道请求结果的数据格式。请求的返回的数据格式通常在 Web 服务的相关文档里详细说明。比如,在上面的例子里,在这里查看 Web 服务信息:Yahoo Weather
  • 为了更好地对 JSON 返回结果进行处理,你可以在代码中使用 JSON.parse 方法,通过这个方法,你可以将字符串类型的 JSON 结果转化为对象类型,这样更方便在代码中进行数据操作。

查看更多少儿编程教程、JavaScript 介绍

返回文档首页