javascript - 管理多个 ajax 请求的正确方法是什么?

标签 javascript ajax

我们都在 AJAX 教程中看到过一些发送数据的示例。它们都(或多或少)看起来像:

var http = createRequestObject(); // shared between printResult() and doAjax()

function createRequestObject() { /* if FF/Safari/Chrome/IE ... */ ... }

function printResult() 
{ 
    if (http.readyState == 4) { ... } 
}

function doAjax() {
    var request = 'SomeURL';
    http.open('post', request);
    http.onreadystatechange = printResult;
    data = ...; // fill in the data
    http.send(data);
}

// trigger doAjax() from HTML code, by pressing some button

这是我不完全理解的场景:如果按钮被快速按下几次怎么办? doAjax() 是否应该以某种方式重新初始化 http 对象?如果对象被重新初始化,已经播出的请求会发生什么情况?

PS:致版主:这个问题可能与社区维基相关。如此处所述 ( https://meta.stackexchange.com/questions/67581/community-wiki-checkbox-missing-in-action ) - 如果我做对了 - 请适本地标记这个问题。

最佳答案

由于 AJAX 具有异步特性,每次单击按钮都会引发异步事件,从服务器获取/发布一些数据。您提供一个回调,因此它会在服务器完成处理数据时触发多次。

这是默认的正常行为,您不应该重新初始化 http 对象。如果您想呈现多个发送操作,您必须手动执行(例如,在第一次调用时禁用按钮)。

我还建议使用 jQuery $.ajax,因为它封装了许多这些细节。

关于javascript - 管理多个 ajax 请求的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5934070/

相关文章:

ajax - Internet Explorer错误

jquery - POST XML 到服务器,接收 PDF

java - Spring MVC Ajax POST

javascript - 发送通过 AJAX 更改的元素的值

javascript - Braintree 托管字段未在 Polymer 上渲染

javascript - 我无法从 JSON 文件获取数据 - $.getJSON 不起作用

javascript - 在 Html 中如何使用 Ajax 将本地文件传输到服务器

javascript - $interval 不允许我更新我的前端

javascript - 检查字符串数组是否匹配 obj 键/属性

javascript - 在 Ajax 调用中调用辅助方法