Как использовать объект JSON, полученный одной функцией JavaScript в другой функции? - PullRequest
4 голосов
/ 25 марта 2011

Я написал функцию, которая возвращает формат JSON через вызов ajax.JSON - это

 {
    "communication": [{
        "communication_name": "None",
        "communication_id": "1"
    }],
    "hardware": [{
        "hardware_name": "XXXXXXXX",
        "hardware_id": "6"
    }],
    "Sofware": [{
        "software_name": "XXXXXX",
        "software_id": "3"
    }, {
        "software_name": "XXXXXXXXXXXXX",
        "software_id": "4"
    }]
}

И это функция JavaScript для получения этого ответа:

function getModelData(model_id, model_name){

     var xmlHttp = createXmlHttpRequestObject();

    try {
    xmlHttp.open("GET", "ajaxmodel_new.php?model_id="+model_id,true);
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4 && xmlHttp.status==200){
        var myJSONObject =  JSON.parse(xmlHttp.responseText)
        //alert(myJSONObject.communication[0].communication_name)
         }
    }
    xmlHttp.send(null);

    } catch (e){
    alert("Can't connect to server:\n" + e.toString());
    }
}

Он получает правильный ответ.И есть еще одна функция для получения выбранного значения в выбранном раскрывающемся списке:

<div id="selected_options">
                <select onchange="test()" id="selected_opt">
                <option value="0" selected>-Select-</option>
                <option value="1">Communication</option>
                             </select></div>
function test() {
    var get_id = document.getElementById('selected_opt');
    var result = get_id.options[get_id.selectedIndex].value;
    alert(result);
}

Цель

Мне нужно использовать ответ JSON, т. Е. myJSONObject, в test() функция.Как я могу использовать тот var myJSONObject, который получается в функции getModelData() ajax в функции test()?

Ответы [ 2 ]

4 голосов
/ 25 марта 2011

У меня был другой подход при разборе объекта JSON .

Со стороны PHP я создаю объект и сохраняю его в переменной скажем, $JSONvar. Теперь я echo переменная.

Тогда на стороне клиента я перехватываю объект.

var JsonObject = {};
var http = new XMLHttpRequest();
http.open("GET", url, true); //url is the url echoing the jsonString
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
    var responseTxt = http.responseText;
    myJSONObject = eval('(' + responseTxt + ')');
    test(myJSONObject);
 }
}
http.send(null);

Ваша тестовая функция должна иметь возможность доступа к объекту, подобному этому,

function test(myJSONObject) {
var object = myJSONObject;
alert(object);
var get_id = document.getElementById('selected_opt');
var result = get_id.options[get_id.selectedIndex].value;
alert(result);
}
2 голосов
/ 25 марта 2011

Вызов test() из функции в xmlHttp.onreadystatechange, передача декодированного объекта в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...