Pivot.js中动态传递参数至pivot()方法失效问题求助
解决Pivot.js动态加载配置参数失效的问题
我帮你排查下问题出在哪哈,你遇到的核心问题其实有两个:异步请求的执行顺序错误,以及配置数据的类型处理完全搞反了,咱们一步步来修复:
问题1:异步请求顺序混乱,配置数据未加载完成就渲染透视表
你现在同时发起了两个AJAX请求,获取数据集的请求很可能比获取配置的请求先完成,这时候Json_ConfigData还是空对象,自然没法正确渲染透视表。必须保证先拿到配置数据,再请求并渲染数据集。
问题2:配置数据类型处理错误
你把服务器返回的文本格式JSON,用JSON.stringify()转成了字符串,但Pivot.js的pivot()方法要求第二个参数是JavaScript对象,不是JSON字符串。正确的做法应该是把文本转成对象,而不是反过来。
修复后的完整代码
<div> <script> var Json_ConfigData = {}; // 第一步:先加载配置数据,成功后再加载数据集 $.ajax({ url: "Handlers/GET_Pivot_Config.ashx", contentType: "application/text", dataType: "json", // 直接指定为json,jQuery会自动把返回的文本转成对象 success: function(configData) { // 注意:如果服务器返回的是聚合器/渲染器的字符串名称(比如"Sum as Fraction of Columns"),需要映射成实际函数 var utils = $.pivotUtilities; configData.aggregator = utils.aggregators[configData.aggregator]; configData.renderer = utils.renderers[configData.renderer]; Json_ConfigData = configData; // 配置就绪,开始加载数据集 fetchDataSet(); }, error: function() { alert('加载配置失败'); } }); // 第二步:加载数据集并渲染透视表 function fetchDataSet() { $.ajax({ url: "Handlers/GET_pivotDataSet.ashx", dataType: "json", success: function(data) { var utils = $.pivotUtilities; // 直接传入已经处理好的配置对象 $("#output2").pivot(data, Json_ConfigData); }, error: function(data) { alert('加载数据集失败 :- ' + data); } }); } </script> <div id="output2" runat="server" style="margin: 30px;"></div> </div>
关键改动说明
- 调整请求顺序:把数据集请求嵌套在配置请求的成功回调里,确保配置完全加载后再处理数据
- 正确处理数据类型:将配置请求的
dataType设为json,让jQuery自动完成JSON字符串到对象的转换;如果必须用text类型,就在成功回调里用JSON.parse(data)手动转换 - 函数映射处理:如果服务器返回的配置里是聚合器/渲染器的字符串名称(而非直接函数),需要手动映射到Pivot.js工具类里的对应函数——因为服务器无法直接返回JavaScript函数对象
内容的提问来源于stack exchange,提问作者Hardik Parmar
相关产品推荐
相关产品推荐

