如何将Ajax请求结果传递给同一类中的公共变量?
解决jQuery+Underscore类中Ajax异步数据传递与变量赋值问题
先修正核心逻辑错误:修复Update函数的赋值逻辑
你的Update函数写反了判断条件,只有当data为空时才给spotName赋值,正常返回有效数据时根本不会更新变量。调整判断逻辑:
// 修正后的Update方法 Update: function(data) { // 当返回有效数据时赋值给公共变量 if (data) { this.spotName = data; // 赋值完成后立即触发图表渲染逻辑 this._getChartDisplayDiv(); } }
处理Ajax异步特性,确保数据返回后再执行渲染
Ajax是异步操作,你之前在_getChartDisplayDiv里调用Load后立刻打印spotName,此时请求还没完成,变量自然还是null。需要把图表渲染逻辑放到Ajax回调里,或用Promise确保数据返回后再执行。
方式1:修正Load方法的this指向并触发更新
Load: function() { // 保存类实例的this指向,避免Ajax回调中this丢失 var self = this; $.ajax({ url: '/你的接口地址', type: 'GET', success: function(response) { // 调用Update方法完成变量赋值 self.Update(response); }, error: function(err) { console.error('获取节点类型失败:', err); } }); }
方式2:用Promise封装Ajax,更优雅处理异步
Load: function() { return new Promise(function(resolve, reject) { $.ajax({ url: '/你的接口地址', type: 'GET', success: resolve, error: reject }); }); } // 在需要触发的地方调用: this.Load().then(function(data) { this.spotName = data; this._getChartDisplayDiv(); }.bind(this)).catch(function(err) { console.error('请求失败:', err); });
问题根源回顾
- 异步时序问题:Ajax请求是异步执行的,调用
Load后立刻访问spotName,此时请求还未完成,变量未被更新。 - 赋值逻辑错误:Update函数的条件判断写反,仅在
data为空时才赋值,正常返回的有效数据无法写入spotName。
内容的提问来源于stack exchange,提问作者DavidN
相关产品推荐
相关产品推荐

