异步 JavaScript
异步只是意味着函数不会阻止脚本其余部分的执行。
如果我们有 PHP 背景,那么一开始这可能会非常令人困惑,因为没有任何内容表明 HTTP 请求没有返回任何内容。
问题是,脚本下方将有一些代码依赖于返回的 HTTP 请求的结果,但由于该函数是非阻塞的,脚本的其余部分将在 HTTP 请求函数返回之前执行。
解决这个问题的一种方法是接受函数的异步特性,而不是与之抗争。
为了解决这个问题,我们可以使用一个“回调”函数。
回调函数只是在 HTTP 请求的结果返回或者下载时调用的函数。
但是请注意,我们需要继续在回调函数中工作,而不是返回到组合 root 。
这可能如下所示:
httpClient = new http_client(); httpClient.get("/request_handler.php", callback); function callback(response) { //Do stuff here alert(response); }
我花了很长时间才弄清楚这一点。
所以,我们在 PHP 中的做法在 JavaScript 中实际上是错误的:
//"Wrong" way to do it httpClient = new http_client(); response = httpClient.get("/request_handler.php"); alert(response);
这被一些人称为回调地狱。
上面的例子使用的 HTTP Client,它是一个用于发送 HTTP 请求的 JavaScript 类。
用纯 JavaScript 编写自己的 AJAX 函数是一种很好的做法,但在生产中,使用包含的库或者类通常更好,因为它可能会增加与浏览器的兼容性。
Ajax 代表异步 JavaScript 和 XML,它只是 JavaScript 中用于创建网站或者 Web 应用程序的一种技术,它从服务器异步加载和发送数据。
AJAX 可用于在后台以静默方式向服务器发送 HTTP 请求。
服务器通常通过结束 200 ok 响应代码和响应正文来响应这些请求。
响应的正文部分通常只是普通的 HTML 或者 XML,然后可以通过 JavaScript 的 innerHTML 属性直接插入。
但是,许多现代应用程序现在使用 JSON 对象作为响应。
使用 JavaScript 中的内置函数可以轻松地将 JSON 对象协调为数组。
httpClient = new http_client(); httpClient.get("/request_handler.php", callback); function callback(response) { //Do stuff here alert(response); }