以发送的相同顺序显示 AJAX 响应,而不使用同步请求
Displaying AJAX responses in the same order they were sent out without using synchronous requests
我发送了多个getJSON请求,每次请求后,我都会构建一个面板并使用数据初始化第三方分层网格。我遇到的问题是面板不是按照发送请求的顺序创建的,而是按照它们返回的顺序创建的。我想我已经把自己挖成一个整体,但如果没有必要,我真的不想重新设计它。
var _grids = {
ServiceGrid: {
id: 0,
parentUrl: _SERVICE_CONTENT_URL,
childUrl: _SERVICE_HISTORY_URL,
parentElementName: "ServiceTypeName",
childElementName: "ServiceLogEntries",
childPrimaryKey: "LogID",
tableName: "Service",
data: [],
parentColumns: [...],
childColumns: [...]
},
ServiceItemGrid: {
id: 1,
parentUrl: _SERVICE_ITEM_CONTENT_URL,
childUrl: _SERVICE_ITEM_HISTORY_URL,
parentElementName: "PackageServiceItemName",
childElementName: "ServiceItemLogEntries",
childPrimaryKey: "LogID",
tableName: "Service Item",
data: [],
parentColumns: [...],
childColumns: [...]
}
};
function prepareDataForGrid(_grids, id) {
var tableIdIncrementor = 0;
var $panelGroup = $("<div>").addClass("panel-group");
// Append Accordion
$panelGroup.attr("id", "accordion");
$panelGroup.appendTo("#placeholder");
$.each(_grids, function(index, grid) {
var parentUrl = grid.parentUrl,
childUrl = grid.childUrl,
//Request data
parentData = getApiDataAjax(parentUrl, id),
childData = getApiDataAjax(childUrl, id);
$.when(parentData, childData).done(function (parentDataResult, childDataResult) {
//Combine child to parent
combineElements(parentDataResult[0], childDataResult[0], grid);
// Hydrate grid.data with combined data
grid.data = parentDataResult[0];
//loop through grids, build panels for each parent
$.each(grid.data.result, function(index, value) {
appendhtml(grid, value, tableIdIncrementor);
//Create hierarchical grid
$("#" + tableIdIncrementor).igHierarchicalGrid({
initialDataBindDepth: 1,
dataSource: JSON.stringify(value),
dataSourceType: "json",
responseDataKey: "result",
autoGenerateColumns: false,
primaryKey: "ID",
columns: grid.parentColumns,
autoGenerateLayouts: false,
defaultChildrenDataProperty: value[grid.childElementName],
columnLayouts: [
{
key: grid.childElementName,
autoGenerateColumns: false,
primaryKey: value.childPrimaryKey,
columns: grid.childColumns
}
]
});
tableIdIncrementor++;
});
});
});
}
我可能可以先制作所有面板并通过 id 将网格附加到面板,但如果我可以按照发送请求的顺序附加面板和网格,那就简单多了。
谢谢。
一个简单的解决方案是在循环时创建div 并将其附加到目标div,然后在数据到达时将数据插入每个div。
$.each(function () {
var $thisDiv = $("<div>").appendTo("#targetDiv");
$.when(doThis,doThat).done(function (result1, result2) {
$thisDiv.append(result1).append(result2);
});
});
不过,我更喜欢事先构建 html 结构并一次插入所有内容,只是因为我更喜欢尽可能少地接触 dom。
相关文章:
- 如何制作'http请求'在Node js中同步
- Web 工作线程中的同步 XHR 请求是否仍会锁定浏览器
- 同步发出多个 ajax 请求
- 同步 Ajax 请求将导致页面上出现任何问题
- Node.js&两个请求之间的Express/Can上下文切换可以是同步代码
- 如何从node.js中的HTTP请求中获得同步结果
- Nodejs请求之后是请求同步问题
- 使用jQuery同步Ajax请求;我不能在Adobe Air上工作
- Angular2:动态同步http请求
- 如何使用datajs进行同步OData请求
- 同步多个Js请求
- 同步数据库请求节点JS ORM
- 通过递归循环同步ajax请求
- 节点 JS 使用异步请求同步工作流
- Jquery:Ajax 请求看起来是同步的,锁定浏览器
- 根据最新响应在 Node 中发送同步请求
- 如何使用javascript或jQuery与PUT或DELETE请求同步导航寻址
- Mootools XHR请求:同步和/或链式
- 保持客户端与服务器端状态管理和http请求同步
- 如何制作一个jquery"$.张贴“;请求同步