2

I am having JSON as

{
   "js":[
      [
         "556",
         "Name the Bengali film television and stage actor who passed away recently?",
         "Gaynar Baksha",
         "Byomkesh Bakshi",
         "Pijush Ganguly",
         "Kaushik Ganguly",
         "Pijush Ganguly",
         "Beginner",
         "Android",
         "First Mobile OS by google"
      ],
      [
         "557",
         "Venkateswara Rao passed away recently. He was a",
         "Telugu poet",
         "Telugu director",
         "Telugu actor",
         "Telugu lyricist",
         "Telugu actor",
         "Beginner",
         "Android",
         "First Mobile OS by google"
      ],
      [
         "559",
         "Which Indian cricketer who became the fourth player to register hundred in ODIs? ",
         "Ishant Sharma",
         "Virendra Sehwag",
         "MS Dhoni",
         "Virat Kohli",
         "Virat Kohli",
         "Beginner",
         "Android",
         "First Mobile OS by google"
      ],
      [
         "568",
         "First Android Mobile ?",
         "Motorola",
         "Nokia",
         "Lenevo",
         "HTC",
         "Motorola",
         "Moderate",
         "Android",
         "Moto is the first company"
      ],
      [
         "569",
         "col1",
         "col2",
         "col3",
         "col4",
         "",
         "",
         "",
         "",
         ""
      ],
      [
         "570",
         "\u092d\u093e\u0930\u0924 \u0915\u0947 \u092a\u093e\u0938 125 \u092a\u0930\u092e\u093e\u0923\u0941 \u0939\u0925\u093f\u092f\u093e\u0930, \u091c\u093e\u0928\u093f\u090f; \u0915\u093f\u0938\u0915\u0940 \u0915\u093f\u0924\u0928\u0940 \u0924\u093e\u0915\u0924",
         "\u092a\u093e\u0938 125 \u092a\u0930\u092e\u093e\u0923\u0941",
         "data",
         "Php",
         "",
         "",
         "",
         "",
         ""
      ],
      [
         "571",
         "\u092a\u093e\u0938 125 \u092a\u0930\u092e\u093e\u0923\u0941",
         "\u0915\u093f\u0938\u0915\u0940 \u0915\u093f\u0924\u0928\u0940 \u0924\u093e\u0915\u0924",
         "video",
         "excel with php",
         "",
         "",
         "",
         "",
         ""
      ]
   ]
}

When I am checking it on http://www.jsoneditoronline.org/ it is showing correctly i.e. validated, but when I am appending it in table in HTML using AJAX and Jquery it is failed to append.

My code to append it is as follows:

$.ajax({
    type: "GET",
    url: "searchall.php",
    contentType: "application/json; charset=utf-8",
    success: function(data) {
        var response = $.parseJSON(data);

        for (i = 0; i < response.length; i++) {
            $('.dataTableReport').append('<tr style="text-align:center;"><td style="width:6.8%"><span><input name="qid" type="checkbox" value="' + response[i].Question_id + '" style="margin-left: 5%;"/>&nbsp&nbsp&nbsp<label for="qid">' + response[i].Question_id + '</label></span></td><td style="width:20.77%">' + response[i].Question + '</td><td style="width:9.3%">' + response[i].opt1 + '</td><td style="width:9%">' + response[i].opt2 + '</td><td style="width:9%">' + response[i].opt3 + '</td><td style="width:9.8%">' + response[i].opt4 + '</td><td style="width:9.1%">' + response[i].correct + '</td><td style="width:17.3%">' + response[i].explain + '</td><td style="width:5%" onclick="edit(' + response[i].Question_id + ')"> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></td><td style="width:5%" onclick="deletee(' + response[i].Question_id + ')"> <span class="glyphicon glyphicon-trash" aria-hidden="true"></span></td></tr>');
        }
    }
});

All the fields in table are filled with "undefined"

How to parse JSON, and how do I append?

I have modified my JSON as

[ { "Question_id":"556", "Question":"Name the Bengali film television and stage actor who passed away recently?", "opt1":"Gaynar Baksha", "opt2":"Byomkesh Bakshi", "opt3":"Pijush Ganguly", "opt4":"Kaushik Ganguly", "correct":"Pijush Ganguly", "Level":"Beginner", "Category":"Android", "explain":"First Mobile OS by google" }, { "Question_id":"557", "Question":"Venkateswara Rao passed away recently. He was a", "opt1":"Telugu poet", "opt2":"Telugu director", "opt3":"Telugu actor", "opt4":"Telugu lyricist", "correct":"Telugu actor", "Level":"Beginner", "Category":"Android", "explain":"First Mobile OS by google" }, { "Question_id":"559", "Question":"Which Indian cricketer who became the fourth player to register hundred in ODIs? ", "opt1":"Ishant Sharma", "opt2":"Virendra Sehwag", "opt3":"MS Dhoni", "opt4":"Virat Kohli", "correct":"Virat Kohli", "Level":"Beginner", "Category":"Android", "explain":"First Mobile OS by google" }, { "Question_id":"568", "Question":"First Android Mobile ?", "opt1":"Motorola", "opt2":"Nokia", "opt3":"Lenevo", "opt4":"HTC", "correct":"Motorola", "Level":"Moderate", "Category":"Android", "explain":"Moto is the first company" }, { "Question_id":"569", "Question":"col1", "opt1":"col2", "opt2":"col3", "opt3":"col4", "opt4":"", "correct":"", "Level":"", "Category":"", "explain":"" }, { "Question_id":"570", "Question":"\u092d\u093e\u0930\u0924 \u0915\u0947 \u092a\u093e\u0938 125 \u092a\u0930\u092e\u093e\u0923\u0941 \u0939\u0925\u093f\u092f\u093e\u0930, \u091c\u093e\u0928\u093f\u090f; \u0915\u093f\u0938\u0915\u0940 \u0915\u093f\u0924\u0928\u0940 \u0924\u093e\u0915\u0924", "opt1":"\u092a\u093e\u0938 125 \u092a\u0930\u092e\u093e\u0923\u0941", "opt2":"data", "opt3":"Php", "opt4":"", "correct":"", "Level":"", "Category":"", "explain":"" }, { "Question_id":"571", "Question":"\u092a\u093e\u0938 125 \u092a\u0930\u092e\u093e\u0923\u0941", "opt1":"\u0915\u093f\u0938\u0915\u0940 \u0915\u093f\u0924\u0928\u0940 \u0924\u093e\u0915\u0924", "opt2":"video", "opt3":"excel with php", "opt4":"", "correct":"", "Level":"", "Category":"", "explain":"" } ]

and still the following code is not working

$.ajax({
                type: "GET",
                url: "sall.php" ,
                dataType: "text",
                success : function(data) 
                {
                var response = $.parseJSON(data);       
for (i = 0; i < response.length; i++) 
                {
$('.dataTableReport').append('<tr style="text-align:center;"><td style="width:6.8%"><span><input name="qid" type="checkbox" value="' + response[i].Question_id + '" style="margin-left: 5%;"/>&nbsp&nbsp&nbsp<label for="qid">' + response[i].Question_id + '</label></span></td><td style="width:20.77%">' + response[i].Question + '</td><td style="width:9.3%">' + response[i].opt1 + '</td><td style="width:9%">' + response[i].opt2 + '</td><td style="width:9%">' + response[i].opt3 + '</td><td style="width:9.8%">' + response[i].opt4 + '</td><td style="width:9.1%">' + response[i].correct + '</td><td style="width:17.3%">' + response[i].explain + '</td><td style="width:5%" onclick="edit('+response[i].Question_id+')"> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></td><td style="width:5%" onclick="deletee('+response[i].Question_id+')"> <span class="glyphicon glyphicon-trash" aria-hidden="true"></span></td></tr>');
                }         
         }
         });

I am getting the response from server but at line var response = $.parseJSON(data); the execution gets terminate. I am confused why parseJSON(data); is not working?

7
  • Are you sure that your server is sending a response? Can you check the response you get from your server with a browser's developer console? Commented Dec 13, 2015 at 7:59
  • Values you have in "js" property are just lists of values, you won't be able to access them by using keys like "Question_id", only by integer indexes Commented Dec 13, 2015 at 8:01
  • Yes I am getting the response Commented Dec 13, 2015 at 8:08
  • There is no need to set contentType if you are not sending any data to the server. Commented Dec 13, 2015 at 9:10
  • on ajax success callback do console.log(data) and check if you are receiving data in correct format or not. Commented Dec 13, 2015 at 10:23

2 Answers 2

2

if you change your php code, so that it returns json instead of text, then you don't need to parse the returned data (var response = $.parseJSON(data); ). Then the code below will probably work in this case:

$.ajax({
       type: "GET",
       url: "sall.php" ,
       dataType: "json",
       success : function(data) {
            // this works with the original js data
             $.each(data.js, function(index, item) {
                // the two lines below are for testing, you can replace 
                // those with your $('.dataTableReport').append code
                console.debug(item[0])
                console.debug(item[1])
             });         
        }
  });

In the above code the dataType was changed to json, and jQuery's $.each method was used. I made a JSFiddle that shows how $.each loops through your json items. Here is a link for similar type of Stackoverflow question: Iterating through JSON within a $.ajax success:

Sign up to request clarification or add additional context in comments.

Comments

0

Update line

for (i = 0; i < response.length; i++)

to

for (i = 0; i < response['js'].length; i++)

And replace

response[i] -> response['js'][i]

within html appending flow.

Other option is to replace line:

response = $.parseJSON(data);

to

response = $.parseJSON(data)['js'];

1 Comment

probably it's not working because you are trying to access properties of items which doesn't exist, so you need to modify string which you are appending to use existing properties name.

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.