1

I am able to make a Ajax request and getting response as well in form of JSON string, still alert box of JavaScript is not showing actual response text. I am new to ajax concept and dont know much.

Ajax-Call:-

Action triggered on dropdown
<select name="state" onchange="getOptions(this.value)">

Javascript Function called :-
function getOptions(state){
  AJAX.onreadystatechange = handler;
  AJAX.open("GET", "getData?id="+state);
  AJAX.send();
};

Response Firebug is showing

Response Content

This is my code to fetch response and print.

function handler() {
  if(AJAX.readyState == 4 && AJAX.status == 200) {
    var json = eval('(' + AJAX.responseText +')');
    alert('Success. Result:' + json);
  }
  else if (AJAX.readyState == 4 && AJAX.status != 200) {
      alert('Something went wrong...');
  }
}

Every time its a success but i get output as enter image description here

4
  • do var res=JSON.parse(AJAX.responseText); alert(res.name)...It will alert Dehradun Commented Feb 19, 2015 at 7:48
  • i tried that also , still same result Commented Feb 19, 2015 at 7:49
  • 1
    It is an array. You need res[0]. But why not use jQuery if you tag the question jQuery? Commented Feb 19, 2015 at 7:51
  • 1
    Do something like res[0].name.. where res[0] is the first object in array got after JSON.parse(AJAX.responseText) Commented Feb 19, 2015 at 7:52

2 Answers 2

1

You need to treat your response as JSON not as text.

Try this:

function handler() {
    if (AJAX.readyState == 4 && AJAX.status == 200) {
        var json = JSON.parse(AJAX.responseText), len = json.length, i = 0, txt = "";
        for (; i < len; i++) {
            if (txt) {
                txt += ", ";
            }
            txt += json[i].name;
        }
        alert('Success. Result:' + txt);
    } else if (AJAX.readyState == 4 && AJAX.status != 200) {
        alert('Something went wrong...');
    }
}
Sign up to request clarification or add additional context in comments.

1 Comment

How about the more efficient for (; i < len; i++) { txt += ", "+json[i].name; } if (txt) txt = txt.substring(2); -also use console instead of alert in async processing
0

If you need to see the value as part of debugging the code, you should use console.log(AJAX) to inspect the value.

If you really need to display some message to the user, then reconsider showing the json result unformatted/filtered - that said you could iterate through all the objects properties and concenate theese in a string (like @Hiral shows).

Comments

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.