【问题标题】:Use of global variable with ajaxajax 使用全局变量
【发布时间】:2015-08-11 11:34:31
【问题描述】:

目前我正在开发一个使用 asp.net 和 c# 的网站。我正在使用web service 从数据库中获取数据,并且我得到了正确的数据而没有问题。但是,一旦我通过ajax 调用获取数据,我需要将其分配给一个全局变量,稍后我将使用该变量创建一个树形图。这就是我的问题所在,我尝试分配 JSON 对象,但我似乎无法让它工作。我不断收到错误

TypeError: treeData 未定义

请有人指导我。下面是相关代码

Ajax Call

$(function () {
   $.ajax({
   type: "POST",
   url: "MyService.asmx/SomeFunction",
   data: "{}",
   contentType: "application/json; charset=utf-8",
   dataType: "json",
   success: successHandler
   });
});

SuccessHandler

function successHandler(data) {
  var a = JSON.parse(data.d);
  var b = [JSON.stringify(a)];
}

var treeData = successHandler[0]; //This part keeps giving me error

提前感谢您的所有帮助和支持。

【问题讨论】:

  • successHandler 是一个函数而不是一个数组,不要忘记 AJAX 是异步的
  • “我后来用它来创建树形图” - 定义 later。例如如果您的网络调用需要 5 秒才能通过网络检索数据,那么晚多少是

标签: javascript c# jquery asp.net ajax


【解决方案1】:

successHandler 是一个函数时,您正试图将它作为一个数组访问。你不能那样使用它。相反,将[JSON.stringify(a)] 分配给一个全局变量,并在需要数据时访问该变量,如下所示:

var dataFromAjax; 
var treeData; 

function successHandler(data) {
    var a = JSON.parse(data.d);
    dataFromAjax = [JSON.stringify(a)];

    setTreeData();
}

function setTreeData() { //this function can be in the seperate script tag
    treeData = dataFromAjax[0]; 
}

【讨论】:

  • 感谢您的回答,但是我收到以下错误 TypeError: treeData is undefinedTypeError: dataFromAjax is undefined
  • 您何时尝试访问 treeData?如果您在 ajax 调用的回调之外使用它,则可能尚未设置 treeData。
  • 我在一个单独的script 标记中访问它,然后最后在另一个js 文件中访问它,例如var root = treeData[0];
  • 是的,你不能那样做。然后你必须将另一个地方包装在一个函数中,所以在 ajax 请求完成之前它不会被执行。我将编辑我的答案以反映这一点。
  • 好的,我现在明白你的意思了。谢谢你的帮助:)
【解决方案2】:

在这种情况下,您需要从函数中返回对象并像这样使用它successHandler()[0];

function successHandler(data) {
  var a = JSON.parse('[{"a":1, "b":2}]');
  return a; // you need to return the data from here.
}

var treeData = successHandler()[0]; //This part keeps giving me error
console.log(treeData)

【讨论】:

  • 感谢您的回答,如果我使用var treeData = successHandler()[0]; ,我会收到以下错误TypeError: data is undefinedconsole.log(treeData) 也显示undefined
猜你喜欢
  • 2022-01-04
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
相关资源
最近更新 更多