2014-09-26 3 views
0

У меня есть функция, которая получает текст JSON с определенного сайта:Заполните отборное с JSON значений

window.onload = function httpGet() 
{ 
    var xmlHttp = null; 
    var box = document.getElementById("http") //just for testing 
    xmlHttp = new XMLHttpRequest(); 
    xmlHttp.open("GET", "http://link_to_Json_Text", false); 
    xmlHttp.send(null); 
    box.value += xmlHttp.responseText; //just for testing 
    return xmlHttp.responseText.toJSON(); 

} 

Это dislays результаты как:

{ 
    "head": { 
    "vars": [ "uri" , "label" ] 
    } , 
    "results": { 
    "bindings": [ 
     { 
     "uri": { "type": "uri" , "value": "http://tematres.befdata.biow.uni-leipzig.de/vocab/?tema=751" } , 
     "label": { "type": "literal" , "xml:lang": "en" , "value": "15n" } 
     } , 
     { 

Затем я выполнить эту функцию, чтобы получить значения JSON как объект:

var results = httpGet().results.bindings.map(function(el){ 
    return { uri: el.uri.value, label: el.label.value }; 
}); 

Тогда я хотел бы получить значение второй функции в HTML-Селе ect меню.

Я не уверен, однако, если второй метод правильно называть первый, так как консоль dislays ошибки вроде: Uncaught ReferenceError: httpGet is not defined

Что мне нужно использовать value из label заполнить меню выбора.

+0

Убедитесь, что у вас есть видимость HttpGet функции от результатов, похоже, вы не имеете доступ к Это. – Balder

+0

Я совершенно не знаком с JavaScript, не могли бы вы рассказать мне, что вы подразумеваете под «видимостью»? – callback

+0

Я имею в виду, что когда вы вызываете httpGet, похоже, в этой точке не определено, я не могу быть уверен, увидев только этот фрагмент кода, но он просто скажет вам, что это не определено – Balder

ответ

0

Просто цепь события успеха для запроса:

window.onload = function() //No function name needed 
{ 
    var xmlHttp = null; 
    var box = document.getElementById("http") //just for testing 
    xmlHttp = new XMLHttpRequest(); 
    xmlHttp.open("GET", "http://link_to_Json_Text", false); 
    xmlHttp.send(null); 
    xmlHttp.onreadystatechange=function() 
    { 
     if (xmlHttp.readyState==4 && xmlHttp.status==200) 
     { 
      var results =xmlHttp.responseText.toJSON(); 
      results.bindings.map(function(el){ 
       return { uri: el.uri.value, label: el.label.value }; 
      }); 
     } 
    }; 
} 

Это просто сделать запрос HttpGet и ждать запроса до конца (readyState == 4), чтобы вызвать funcionality для обработки результатов.

Во всяком случае, я хотел бы порекомендовать вам, если вы можете, используя JQuery, потому что это намного проще работать с Ajax, чем родная JS

+0

Большое спасибо за ответ, но как я могу присвоить все элементы el.label.value выпадающему меню? Буду признателен! – callback

+0

И теперь элемент 'box' не заполняется содержимым переменной' result', даже если я вызываю 'box.value + = results' .. – callback

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