我们都在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
Run Code Online (Sandbox Code Playgroud)
这是我不完全理解的场景:如果按钮被按下几次很快怎么办?应该doAjax()以某种方式重新初始化http对象?如果对象被重新初始化,那么已经播出的请求会发生什么?
PS:主持人:这个问题可能与社区维基有关.如此处所述(https://meta.stackexchange.com/questions/67581/community-wiki-checkbox-missing-in-action) - 如果我做对了 - 请恰当地标记这个问题.
当然,现在有许多库可以出色地完成工作,并且应该在生产环境中使用。然而,我的问题是关于幕后细节。所以在这里我找到了类似 lamda 演算的方法来为每个请求提供专用的请求对象。这些对象显然会被传递到响应到达时调用的回调函数等:
function printResult(http) {
if (http.readyState == 4) { ... }
...
}
function doAjax() {
var http = createRequestObject();
var request = 'SomeURL';
http.open('get', request);
http.onreadystatechange = function() { printResult(http); };
http.send(null);
return false;
}
Run Code Online (Sandbox Code Playgroud)
在Chrome和IE9下测试成功。
| 归档时间: |
|
| 查看次数: |
2794 次 |
| 最近记录: |