2012-03-13 69 views
3

我試圖從php jquery傳遞一個json,進入一個sql查詢數組並獲取以下javascript錯誤。JSON.parse:意想不到的字符

JSON.parse: unexpected character 

函數返回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; 
} 

使用此功能後以這種方式,

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

和JavaScript代碼是這樣的:

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

我如何糾正這個錯誤以及我的方式可以從jquery讀取json?

+1

您有一個SQL注入漏洞。 – SLaks 2012-03-13 17:21:51

+1

要糾正錯誤,您必須擁有有效的JSON。顯然你的PHP腳本不會創建有效的JSON。 'json_encode($ v,JSON_FORCE_OBJECT)'輸出的例子會很有幫助。 – 2012-03-13 17:21:51

+1

在嘗試解析它之前先在你的JS中轉儲'data',確保除了json之外沒有別的東西(例如沒有php警告/錯誤消息)。 – 2012-03-13 17:25:10

回答

7

您不需要$.parseJSON調用,因爲jQuery會自動執行此操作,因爲如果您未指定dataType屬性,jQuery會嘗試猜測它並調用正確的函數以在將數據處理到成功函數之前解析響應

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

退房也是這個問題Why is 'jQuery.parseJSON' not necessary?

0

我只是看起來像數據就遇到了這個在FF10.0.2:

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

(與陣列中的多個對象 - 縮短爲了清楚)

它實際上使用eval解析行,不過,代替JSON.parse。 (我不使用jQuery在這裏。)

的問題就走了,當我改變'‘爲價值觀:

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

我以爲’的要求僅是爲屬性名稱,而不是數據值。

相關問題