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?

Vicent
  • 133
  • 1
  • 2
  • 6
  • 1
    You have a SQL injection vulnerability. – SLaks Mar 13 '12 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. – Felix Kling Mar 13 '12 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). – Marc B Mar 13 '12 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 – Nicola Peluchetti Mar 13 '12 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. – hakre Mar 13 '12 at 17:30

2 Answers2

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?

Community
  • 1
  • 1
Nicola Peluchetti
  • 76,206
  • 31
  • 145
  • 192
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.

SteveC
  • 11
  • 1