在看似随机的时间,我工作的应用程序需要几秒钟才能发送ajax调用,而我在调试器中解析网络选项卡中的数据时遇到了困难。
基本上'开始'需要4到12秒之间的时间。如果我查看MSDN文档和浏览器本身,它会说:'从最初创建请求到发送请求的时间。'
这是什么意思?
是创建xmlhttp变量和调用对象的send()方法之间的时间吗?这就是我解释“从创建到发送”的方式。这意味着该问题出现在ajax请求代码中。
或者是点击GUI之间的时间,它会调用一堆函数,哪一个会触发ajax调用?这意味着事件处理程序和调用ajax函数之间存在很大的延迟。
由于提出了大量请求,我是否遇到了浏览器请求队列限制?如果这可能是一个问题,有关如何检查的任何提示吗?
还有别的吗?
我将包含当前代码进行ajax调用,以防选项1正确且ajax函数出错。
function get( path ) {
var xmlhttp = null,
domainRequest = false,
handler,
queryName,
result = {};
if (path.charAt(0) === '/') path = this.host + path;
// Implicit resource name, get from path.
if (arguments.length === 2) {
queryName = path.substring(7).split('/')[1];
handler = arguments[1];
}
// Explicit resource name or alias.
else if (arguments.length === 3) {
queryName = arguments[1];
handler = arguments[2];
}
result[queryName] = {
"value" : null,
"info" : {
"filtered" : false,
"query" : queryName,
"server" : false,
"status" : "ERROR",
"message" : ""
}
};
xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
var type = (domainRequest) ? 'text/plain' : xmlhttp.getResponseHeader('Content-Type'),
response = (type === 'text/xml') ? xmlhttp.responseXML : xmlhttp.responseText;
if (response) result[queryName] = response;
else result[queryName].info.message = "Malformed data.";
handler(result);
};
xmlhttp.onerror = function() {
// Failure on the network level.
if (window.navigator.onLine) result[queryName].info.message = "The requested resource could not be found or the service is down.";
else result[queryName].info.message = "No network.";
handler(result);
};
xmlhttp.open('GET', path);
// CORS and IE10-IE11 withCredentials fix: the object state has to be OPEN to set the credentials flag in IE10-IE11
xmlhttp.withCredentials = true;
// IE7-9 domain request premature abort fix.
// http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/
xmlhttp.ontimeout = function() {
result[queryName].info.message = "Network timeout.";
handler(result);
};
xmlhttp.onabort = function() {
result[queryName].info.message = "Request aborted.";
handler(result);
};
xmlhttp.onprogress = function() {};
xmlhttp.send();
}