3

I'm trying to pass a json from php jquery, after getting into an array of sql query and get the following javascript error.

JSON.parse: unexpected character

The function to return result of sql:

public function selectassocSql($sql){
$i = 0;
        $resSelect = array();
        mysql_query("SET NAMES 'utf8'");
        $result = mysql_query($sql);
        while ( $row = mysql_fetch_assoc($result) )
        {
            $resSelect[$i] = $row;
            $i++;
        }
        mysql_free_result($result);
        return $resSelect;
}

After use this function in this way,

$sql = "SELECT id, code, name FROM table WHERE code LIKE '%$codcli%' ";
$v = $data->selectassocSql($sql);
echo json_encode($v, JSON_FORCE_OBJECT); 

And the javascript code is this:

$('#formclientes').submit(function(e){

        e.preventDefault();
        $.ajax({
            type: 'POST',
            url:$(this).attr('action'),
            data:$(this).serialize(),
            success:function(data)
            {
              //console.log("SUCCESS " + data);
              var json_cli = $.parseJSON(data);
            }
        })
    })   

How I can correct this error and how I can read a json from jquery?

5
  • 1
    You have a SQL injection vulnerability. Commented Mar 13, 2012 at 17:21
  • 1
    To correct the error, you have to have valid JSON. Apparently your PHP script is not creating valid JSON. An example of the output of json_encode($v, JSON_FORCE_OBJECT) would be helpful. Commented Mar 13, 2012 at 17:21
  • 1
    Dump out data in your JS first before trying to parse it, make sure that there's nothing else in there except json (e.g. no php warning/error messages). Commented Mar 13, 2012 at 17:25
  • 1
    @FelixKling he doesn't need the $.parseJSON call, jQuery guesses the dataType and parse the response for you: data is already a json Commented Mar 13, 2012 at 17:27
  • 1
    @FelixKling: json_encode does always return valid json (e.g. string(4) "null"), however, error reporting and display errors might be set in a way that more is output than just the json string. Commented Mar 13, 2012 at 17:30

2 Answers 2

7

You don't need the $.parseJSON call as jQuery automatically does it because if you don't specify a dataType property jQuery tries to guess it and calls the correct function to parse the response before the data is handled to the success function

   $.ajax({
        type: 'POST',
        url:$(this).attr('action'),
        data:$(this).serialize(),
        success:function(data)
        {
          //console.log("SUCCESS " + data);
          var json_cli = data;
        }
    })

check out also this question Why is 'jQuery.parseJSON' not necessary?

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

Comments

0

I just ran into this in FF10.0.2 with data that looked like:

[ { "firstName": 'Joe', "lastName": 'Smith' } ]

(with multiple objects in the array - shortened for clarity)

It actually parsed OK using eval, though, instead of JSON.parse. (I'm not using jQuery here.)

The problem went away when I changed ' to " for the values:

[ { "firstName": "Joe", "lastName": "Smith" } ]

I thought the " requirement was only for property names, not data values.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.