JSON.parse:意外的角色

时间:2013-12-14 04:43:38

标签: javascript php json

我试图将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"}]

5 个答案:

答案 0 :(得分:0)

您是否在发送数据之前在PHP代码中的任何位置设置内容类型。我在你的例子中没有看到它。

你应该: header('Content-Type:application / json');

答案 1 :(得分:0)

我已经使用您的代码运行了一个简单的测试,它对我来说很好。这是代码。

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的最新版本),它可能对您有用。请试试,然后告诉我,我会相应地更改代码。

答案 2 :(得分:0)

我会首先尝试发送虚拟数据,例如(根据需要调整 - 你明白了):

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

如果可行,那么我会怀疑数据库中出现了一些字符编码问题,并开始查看utf8转换器函数(对于php json编码问题,它们有很多online)。浏览器控制台可能是消毒的东西,可以解释为什么它可以直接工作。

如果它不起作用那么我会用上面的echo线创建一个php页面以确保没有发送任何其他内容(并且不添加关闭的php标签 - 这样更安全)

我还会调查你的php版本 - 有些问题与我理解的空白字符串有关。您可以升级或尝试使用为早期php版本(例如this一个)制作的备用json_encode函数。

答案 3 :(得分:0)

非常奇怪,但是当重新创建PHP文件时,问题似乎消失了......不确定,但我认为它必须用NotePad ++进行编辑。第二次用Submlime文本创建文件,它很好。所以它可能是编码问题..感谢大家的意见。

答案 4 :(得分:0)

可能您获得了无效的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');
        }
    }