我使用$ .GET()异步获取仪表板的数据(汇总时间帧)。脚本很简单,我等着使用$(window).load(function () {}
完全呈现页面(字体,图标......)。
然后我使用document.querySelectorAll('[data-id]');
搜索相关的ID并在for循环中启动查询。
// some date ranges I'm using for the request
var request = [
[moment(), moment(), 'today'],
( ... )
[moment().subtract(1, 'year').startOf('year'), moment().subtract(1, 'year').endOf('year'), 'last-year']
];
// find all data-id elements
var t = document.querySelectorAll('[data-id]');
for (var i = 0; i < t.length; i++) {
// extract the id
var mid = t[i].getAttribute('data-id');
// iterate the request array
for (var j = 0; j < request.length; j++) {
requestData(mid, request[j]);
}
}
function requestData(id, time) {
$.ajax({
url: "/api/v1/data/point/" + id,
type: 'GET',
data: {
from: time[0].format('YYYY-MM-DD'),
to: time[1].format('YYYY-MM-DD'),
sum: true
},
dataType: 'json',
success: function (response) {
// find elements by id stuff and replace the innerHTML with the response value (it is just to long to display here, but nothing special).
}
});
}
问 当页面正在执行~5-12 GET请求时,页面被完全阻止,我无法通过单击链接加载其他页面。那么这里什么基本上错了?该行为是否也可能与Web服务器的功能相关,这些12个GET请求会导致负载过重?我还注意到,如果我使用jquerys $(document).ready函数,那么图标会在$ .Ajax完成后呈现 - 这会产生正方形而不是图标。
编辑:我认为API的mysql调用可能会阻塞服务器?
Edit2:默认情况下,async为true(http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings)
答案 0 :(得分:1)
您可以在AJAX调用中添加 async:false 。
function requestData(id, time) {
$.ajax({
url: "/api/v1/data/point/" + id,
type: 'GET',
async: false,
data: {
from: time[0].format('YYYY-MM-DD'),
to: time[1].format('YYYY-MM-DD'),
sum: true
},
dataType: 'json',
success: function (response) {
// find elements by id stuff and replace the innerHTML with the response value (it is just to long to display here, but nothing special).
}
});
}
如果这不起作用,则将其替换为true。
答案 1 :(得分:0)
以下是关于如何改善状态的想法: