簡體   English   中英

JSON.parse:意外字符

[英]JSON.parse: unexpected character

我正在嘗試將JSON編碼數組從PHP返回到div。 我收到JSON.parse:意外字符。 任何幫助表示贊賞。

詢問

  <script type="text/javascript">
  $(document).ready(function(){
  var acct =$('#acct').val();

  $.getJSON("CJS/jsontest.php",{acct: acct}, function(data){
    $('#result').html(data);
  });

});
</script>

的PHP

<?php
  include_once '../Functions/dbconnect.php';


$varacctname = $_REQUEST['acct'];
$varViewContacts = mysql_query("SELECT * FROM contacts WHERE c_company = '$varacctname'");

$rows = array();

  while ($row = mysql_fetch_assoc($varViewContacts)) {

    $rows[] = $row;

  }
echo json_encode($rows);

我的JSON

[{"c_ID":"21","c_FirstName":"Mike","c_LastName":"Be","c_Phone":"123456789","c_ext":"0","c_fax":"0","c_address1":"","c_address2":"","c_city":"","c_state":"","c_zip":"0","c_country":"Account","c_Email":"mike.be@test.com","c_Mobile":"123456789","c_company":"TEST"}]

發送數據之前,您是否在PHP代碼中的任何位置設置了內容類型。 我在您的示例中看不到它。

您應該具有:header('Content-Type:application / json');

我已經對您的代碼進行了簡單的測試,對我來說效果很好。 這是代碼。

var JSON = '[{"c_ID":"21","c_FirstName":"Mike","c_LastName":"Be","c_Phone":"123456789","c_ext":"0","c_fax":"0","c_address1":"","c_address2":"","c_city":"","c_state":"","c_zip":"0","c_country":"Account","c_Email":"mike.be@test.com","c_Mobile":"123456789","c_company":"TEST"}]';

var parsed = $.parseJSON(JSON);

console.log(parsed);

我正在使用最新版本的JQuery,它以正確的方式解釋了JSON。

因此,在我的opnion中,$。getJSON()方法無法識別傳入的JSON。 如果您以文本形式獲取數據,然后通過$ .parseJSON()對其進行解析(請不要忘記在項目中包含JQuery的最新版本),那么它可能對您有用 請嘗試一下,然后通知我,我將相應地更改代碼。

我首先嘗試發送虛擬數據,例如(根據需要進行調整-您明白了):

echo json_encode(array(array('name' => 'Joe'))); 

如果這行得通,那么我會懷疑數據庫中會出現一些字符編碼問題,並開始查看utf8轉換器函數(它們在線上大量出現php json編碼問題)。 瀏覽器控制台可能正在消毒,這可能解釋了為什么它可以直接工作。

如果它不起作用,那么我將使用上面的回顯行制作一個php頁面,以確保沒有發送其他任何內容(並且不要添加閉合的php標簽-這樣更安全)

我還將調查您的php版本-從我的理解中,有些字符串有問題。 您可以升級或嘗試使用為早期php版本(例如版本)制作的替代json_encode函數。

很奇怪,但是當重新創建PHP文件時,問題似乎消失了。 因此可能是編碼問題。謝謝大家的投入。

可能您收到無效的JSON字符串響應。 我今天早上才解決類似的問題。 我願意先檢查(嘗試/捕獲)ajax響應字符串(如果可以解析),而不是直接調用JSON屬性(在我的情況下為jsonRes.result)。 因此,請嘗試將以下代碼放入AJAX完整的回調函數中:

    complete: function(data) {
        var jsonRes = null;
        try {
            jsonRes = JSON.parse(data.responseText);
        }
        catch(e) {
            jAlert('Invalid JSON object);
        }
        if (jsonRes===null || jsonRes.result===undefined) {
            jAlert('Invalid Ajax response structure');
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM