网站上的文件分离(在多人项目中)
File seperation on a website (in multi man projects)
我正在构建一个具有以下特性的网站:
- 页面是通过AJAX内联加载的
- CSS、HTML、JavaScript和PHP都是分开的,以便于在一个项目中与多人合作
现在我正在制作一个从数据库动态加载的<select>
标记。只有我遇到了视觉延迟,我的相关页面是:
HTML,content/sellmods.php
:
<h2>Sell mods</h2><br>
<form name="sellmods" method="post" action="sellmods">
<table class="accdet">
<tr class="inputcontainer">
<td class="label">Mod:</td>
<td class="input"><select name="mod"></td>
<td class="check"></td>
<td class="errormessage"></td>
</tr>
</table>
</form>
来自我自己framework.js
:的相关JavaScript
function preprocess(form) {
$(form).find("select").each(function() {
var select = $(this);
callService({
name: "select_" + $(this).attr("name"),
data: { },
success: function(json) {
$(json).each(function() {
var html = "";
$(this.options).each(function() {
html += "<option value='" + this.id + "'>" + this.value + "</option>";
});
$(select).append(html);
});
}
});
});
}
PHP后端,select_mod.php
:
include_once("../content/includes/connect.php");
include_once("_functions.php");
checkAuthorization();
try {
$result = $dbh->query("SELECT modId, name FROM mods ORDER BY name ASC");
} catch (PDOException $ex) {
error($ex);
}
$options = array();
while ($row = $result->fetch()) {
$options[] = array(
"id" => $row->modId,
"value" => $row->name
);
}
echo json_encode(array(
"options" => $options
));
$dbh->close();
页面如何加载,一旦你点击链接,例如:
function loadPage(dataUrl) {
$.ajax({
url: "content/" + dataUrl + ".php",
success: function(html) {
setContent(html, dataUrl);
},
error: function(html, message) {
$.ajax({
url: "content/notfound.php",
success: function(html) {
setContent(html, "notfound");
},
error: function(html, message) {
finalError(message);
}
});
}
});
}
function setContent(html, url) {
html = $.parseHTML(html);
$("#pagemain").html(html);
$(html).filter("form").each(function() {
preprocess($(this));
});
setNavTitle(url);
//only if you actually load a different page
if (currentFilename() !== url) {
window.history.pushState({
"url": url
}, "", url);
}
//cannot unload old js
//load new js
if (typeof loadedScripts[url] === 'undefined') {
$.getScript("javascript/" + url + ".js", function() {
$("#pagemain").trigger("pageload");
loadedScripts[url] = 1;
});
}
else {
$("#pagemain").trigger("pageload");
}
fireInputs();
}
我知道延迟是因为这个原因:
- 我触发
loadPage("sellmods")
- 一个AJAX调用被用来获取页面,一些小的延迟(例如40ms),然后内容被放在网站上
- 然后它开始
preprocess
所有表单,导致对services/select_mods.php
的AJAX调用 - 完成后(再次约40ms),网站会更新
这导致了可通知的40ms延迟(根据服务器负载的不同,有时可能会更大),您将如何解决这个问题,使其在视觉上最不烦人?
用户现在可以看到一个空的<select>
标签,然后它突然开始填充数据。这不仅是<select>
的问题,其他数据也会像这样动态后加载。
请记住,我想将HTML和PHP分开,也欢迎任何其他针对该设计原则的解决方案。
我希望这个问题足够清楚。
通常用户会接受加载标志。因此,您可以显示一个,直到加载ajax页面的最后一部分。例如,您可以有一个注册表,其中包含要执行的所有ajax调用。当它们加载每个成功事件时,会从注册表中删除其ajax;如果没有更多的内容可加载,则向用户显示内容。希望,这很有道理。。。
相关文章:
- 项目文件应位于
- 组织Js项目文件
- Highcharts使用javascript将图表保存在项目文件夹中,而不是下载文件夹中
- 如何在 cakephp 应用程序根目录中运行自定义项目文件夹
- 节点 - Express + Ember + Socket io项目文件结构,用于MVC开发
- 如何在 Node.js 中使用 multer 将文件保存在项目文件夹中
- Grunt:向非项目文件夹添加别名
- 如何使用Angular.js和PHP将多个文档上传到项目文件夹中
- HTML 5&Javascript桌面应用程序和对项目文件的访问
- 如何在PHP中将HighCharts图像保存到项目文件夹中
- 如何在html/javascript中包含项目文件夹外的文件
- 不能添加JS文件,或任何其他,到钛项目文件夹
- extendscript:获取项目文件夹
- 如何组织React Native和Realm项目文件
- 如何使用JavaScript或OracleJet将上传的图像存储在项目文件夹中
- Xcode 4不为项目文件保存语法高亮显示?(并且不自动识别JS文件?!)
- 在Javascript中,当在本地工作时,如何从项目文件夹中读取文件并将其用作ArrayBuffer
- 如何将D3库导入到我的项目文件结构中
- 禁用邮件通知项目/文件夹ALFRESCO 5.2
- 生成的pdf文件保存在项目文件夹内