4

I had written a function which returns JSON format via ajax call. The JSON is

 {
    "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"
    }]
}

And this is the JavaScript function for getting this response:

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());
    }
}

It is getting the correct response. And there is another function is for getting the selected value in the selected drop down:

<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);
}

Objective

I need to use the JSON response, i.e., myJSONObject, in the test() function. How can I use that var myJSONObject which is obtained in getModelData() ajax function in test() function?

1
  • 4
    Longest stackoverflow sentence EVER Commented Mar 25, 2011 at 14:45

2 Answers 2

4

I had a different approach in parsing the JSON Object.

From the PHP side I create the object and store it in a variable say, $JSONvar. Now I echo the variable.

Then on the client side this is how I intercept the object.

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);

Your test function should be able to access the object like this,

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);
}
Sign up to request clarification or add additional context in comments.

3 Comments

i used here is we can declare myJSONObject as a global variable , so that we can access it anywhere inside the function
Using eval like this can be dangerous. If someone one your network is using a DNS man in the middle attack to redirect requests to another server, they could insert arbitrary JavaScript into the response and eval would run it.
I guess we can write a function to sanitize the return json value to check for injections and then eval it.
2

Call test() from the function in xmlHttp.onreadystatechange, passing the decoded object as a parameter.

1 Comment

i'm not getting the correct thing can u plesae tell me in brief or how to code ?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.