我试图将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"}]
答案 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');
}
}