JSON.parse:意外字符


JSON.parse: unexpected character

我正在尝试从PHP向div返回json编码的数组。我收到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文件时,问题似乎消失了。。不确定,但我认为这与使用NotePad++进行编辑有关。。第二次我用Submlime文本创建文件时,它很好。所以可能是编码问题。。感谢大家的投入。

可能得到无效的JSON字符串响应。我今天早上刚刚解决了类似的问题。我想先检查(try/catch)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');
        }
    }