2015-08-11 2 views
0

В настоящее время я работаю на веб-сайте, который использует asp.net и C#. Я получаю данные из базы данных с помощью web service, и я получаю правильные данные без проблем. Однако, как только я получаю данные через вызов ajax, мне нужно назначить его глобальной переменной, которую я позже использую для создания древовидного графика. Вот где моя проблема, я попытался назначить объект JSON, но я не могу заставить его работать. Я продолжаю получать сообщение об ошибкеИспользование глобальной переменной с ajax

TypeError: treeData is undefined

Может ли кто-нибудь мне помочь. Ниже приведен соответствующий код

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 

Заранее спасибо за вашу помощь и поддержку.

+3

'successHandler' функция не является массивом и не забывайте AJAX является асинхронным – Satpal

+0

*« который я позже использовать для создания дерева графа»* - * определить позже *. например если ваш сетевой вызов занимает 5 секунд, чтобы получить данные по проводу, то сколько позже * позже *. – Abhitalks

ответ

2

Вы пытаетесь получить доступ к 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]; 
} 
+0

Благодарим вас за ответ, однако я получаю следующие ошибки: 'TypeError: treeData undefined' и' TypeError: dataFromAjax не определено ' – Code

+0

Когда вы пытаетесь получить доступ к treeData? Если вы используете его вне callback вызова ajax, treeData, вероятно, еще не установлен. – Loyalar

+0

Я обращаюсь к нему в отдельный тег 'script', а затем, наконец, в другой файл' js', например 'var root = treeData [0];' – Code

0

В этом случае вам нужно вернуть объект из функции и использовать его как это 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)

+0

Спасибо за ваш ответ. Если я использую 'var treeData = successHandler() [0]; 'I get Следующая ошибка' TypeError: data undefined' и 'console.log (treeData)' показывает 'undefined' тоже – Code

Смежные вопросы