2013-11-13 1 views
0
function getOptionsData() 
{ 
var xmlhttp = new XMLHttpRequest(); 

xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
    { 
     json_options = JSON.parse(xmlhttp.responseText); 

    } 
} 
xmlhttp.open("GET", "getData.php", true); 
xmlhttp.send(); 
} 

«json_options» является глобальной переменной, которая должна заполняться с responseText в XMLHttpRequest, который, содержащий действующее JSon строку:Json объект успешно заполнен XMLHttpRequest внезапно является «нулевым»

[{"id":"3","model":"NZ\/","model1":"","tablenr":"1","tabkey":"SSG\/","length":"4","descript":"Schukostecker gerade","matchcode":"","price":"0","pricex":"0","code":"1","textnr":"0","artikelnr":"0","funktion":"Seite 1"},{"id":"4","model":"NZ\/","model1":"","tablenr":"1","tabkey":"SWS\/","length":"4","descript":"Schuko gewinkelt \/ angled 90 Grad","matchcode":"","price":"0","pricex":"0","code":"1","textnr":"0","artikelnr":"0","funktion":"Seite 1"}] 

На этом этапе все прекрасно, и json_options содержит действительный json Object.

Функция «getOptionsData» вызывается в функции «createOptionsTable»:

function createOptionsTable() 
{ 
getOptionsData(); 
var element = null; 

for(var i = 0; i < json_options.length; i++) 
{ 
[...] 

Когда я хочу, чтобы получить доступ к «json_options» в данный момент, он говорит, что он является недействительным и я не имею ни малейшего представления, почему ,

Любая помощь с благодарностью, спасибо заранее!

ответ

0

В коде код после getOptionsData(); выполняется до успеха обратного вызова вызова. поэтому получить у json_options утратившим

Попробуйте как этот

function getOptionsData(callback) 
    { 
    var xmlhttp = new XMLHttpRequest(); 

    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
     { 
      json_options = JSON.parse(xmlhttp.responseText); 
      callback(); 

     } 
    } 
    xmlhttp.open("GET", "getData.php", true); 
    xmlhttp.send(); 
} 


function createOptionsTable() 
{ 
    var callback = function() 
    { 
     var element = null; 
     for(var i = 0; i < json_options.length; i++) 
     { 
      [...] 
     } 
    } 

    getOptionsData(callback); 
} 
+0

Отлично! именно то, что я искал! Спасибо! – Jbartmann

0
function getOptionsData() 
{ 
var xmlhttp = new XMLHttpRequest(); 

xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
    { 
     json_options = JSON.parse(xmlhttp.responseText); 
     for(var i = 0; i < json_options.length; i++) 
     { 
      [...] 
     } 
    } 
} 
xmlhttp.open("GET", "getData.php", true); 
xmlhttp.send(); 
} 

Ваш for loop должен выполнить после того, как вы могли бы на самом деле получить réponse от AJAX, а не внутри createOptionsTable() ...

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