以下 Ajax 可以工作,但需要一段时间才能通知客户端用户用户名已被占用。有什么方法可以加快这种响应,或者这只是 Ajax 的正常行为。
客户:
<title>Choose a username</title>
<style>
#targetDiv {
background-color: #FF9999;
width: 40%;
}
</style>
<script type = "text/javascript">
var XMLHttpRequestObject = false;
if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
} else if (window.ActiveXObject) {
XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
function getData(dataSource)
{
if(XMLHttpRequestObject) {
XMLHttpRequestObject.open("GET", dataSource);
XMLHttpRequestObject.onreadystatechange = function()
{
if (XMLHttpRequestObject.readyState == 4 &&
XMLHttpRequestObject.status == 200) {
if(XMLHttpRequestObject.responseText == "taken"){
var targetDiv = document.getElementById("targetDiv");
targetDiv.innerHTML = "<div>That username is taken.</div>";
}
}
}
XMLHttpRequestObject.send(null);
}
}
function checkUsername(keyEvent)
{
keyEvent = (keyEvent) ? keyEvent: window.event;
input = (keyEvent.target) ? keyEvent.target : keyEvent.srcElement;
if (keyEvent.type == "keyup") {
var targetDiv = document.getElementById("targetDiv");
targetDiv.innerHTML = "<div></div>";
if (input.value) {
getData("check.php?name=" +input.value);
}
}
}
</script>
</head>
<body>
<H1>Choose a username</H1>
Enter your new username <input id = "textField" type = "text"
name = "textField" onkeyup = "checkUsername(event)">
<div id = "targetDiv"><div></div></div>
</body>
</html>
服务器
<?php
if ($_GET["name"] == "steve"){
echo "taken";
}
else {
echo "ok";
}
?>
最佳答案
您的问题是“如何加快响应速度”。
响应由您的服务器通过网络发送。
净传输所需的时间总是会有所不同。
但是您可以尝试通过优化网络服务器和 PHP 的配置来获得更快的服务器响应。您可以使用 ab
或 siege
等基准测试工具来测试服务器的响应行为。
然后调整、测试、比较结果,重复直到满意为止。
对服务器的请求就是对服务器的请求。无论如何,如果它是由浏览器通过 ajax 或基准测试工具完成的。
例如,与 PHP 5.3 相比,升级到 PHP 5.6 并启用和调整 opcache 可以显着提高性能。有很多可能的优化。这个问题太宽泛,无法详细说明。
当查看客户端 JS 时:这是普通的 JS。
没有太大的改进空间。我唯一想到的是
将 IE 的 xhrObject 从非常旧的 "Microsoft.XMLHTTP
更改为 new ActiveXObject("Msxml2.XMLHTTP.6.0");
(并且可能添加后备到new ActiveXObject("Msxml2.XMLHTTP.3.0");
)。
关于javascript - 紧固此 Ajax 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30953484/