json 没有价值,但 print_r 有价值 php pdo jquery ajax
Posted
技术标签:
【中文标题】json 没有价值,但 print_r 有价值 php pdo jquery ajax【英文标题】:json not value but print_r has value php pdo jquery ajax 【发布时间】:2015-03-18 06:12:57 【问题描述】:if (isset($_POST['continentid']))
$stmt = $dbh->prepare("SELECT * FROM country_tbl WHERE parent_id = ? ");
$stmt->bindValue(1, $_POST['continentid'], PDO::PARAM_STR);
if ($stmt->execute())
if ($stmt->rowCount() > 0)
while ($selected_row = $stmt->fetch(PDO::FETCH_ASSOC))
$country[] = array('sysid' => $selected_row['sys_id'],'name' => $selected_row['countryname']);
//print_r($country);
echo json_encode($country);
//echo "312321321321";
//return $country;
$.ajax(
type: 'POST',
url: '../include/country.php',
dataType : "json",
data:
continentid: id
,
success: function(data)
for(var i = 0; i < data.length; i++)
console.log("PAIR " + i + ": " + data[i].sysid);
console.log("PAIR " + i + ": " + data[i].name);
);
我上面有这段代码,它使用 jquery ajax 发送请求,它将返回一个 id,该 id 将用作 select 语句的参数。然后我在选择选项框上使用这些值。我已经为此here 发布了一个问题。现在可以正常工作了为国家。问题是为什么列表中的第一个值没有给出 json 值,但如果 print_r 它有值,这个设置有什么问题?
Update
如果我这样做了
print_r($country); echo json_encode($country);
对于第一个元素
Array
(
[0] => Array
(
[sysid] => 1
[code] => 140101000
[name] => China
[parentid] => 1
)
[1] => Array
(
[sysid] => 2
[code] => 140102000
[name] => Japan
[parentid] => 1
)
[2] => Array
(
[sysid] => 3
[code] => 140103000
[name] => Hongkong
[parentid] => 1
)
)
如果我这样做了
print_r($country); echo json_encode($country);
第二个元素
Array
(
[0] => Array
(
[sysid] => 1
[code] => 140101000
[name] => China
[parentid] => 1
)
[1] => Array
(
[sysid] => 2
[code] => 140102000
[name] => Japan
[parentid] => 1
)
[2] => Array
(
[sysid] => 3
[code] => 140103000
[name] => Hongkong
[parentid] => 1
)
)
[
"sysid":"1","code":"140101000","name":"China","parentid":"1","sysid":"2","code":"140102000","name":"Japan","parentid":"1","sysid":"3","code":"140103000","name":"Hongkong","parentid":"1"
]
UPDATE
我想我找到了问题,虽然我还没有找到解决方案,但我认为字符 ñ
和 '
是他们不会为 json 返回值的原因,知道如何让它返回这些值吗?
【问题讨论】:
请分享你的json结构。 类似上面的...例如,一个是大陆列表,第一个不会返回值,但如果 print_r 我将返回值 在 country.php 上使用json_encode
并与问题分享输出
如果print_r
和您的json
之间存在差异,请在问题中添加两者。所以其他人很容易发现问题
不同之处在于,当我执行 print_r 时,我在 ajax 成功中得到输出,但在 json 上没有输出
【参考方案1】:
试试看。 JSON.parse(data)
将字符串转换为 json。
$.ajax(
type: 'POST',
url: '../include/country.php',
dataType : "json",
data:
continentid: id
,
success: function(data)
data= JSON.parse(data);
data.each(key,value)
console.log("PAIR " + i + ": " + data[key].sysid);
console.log("PAIR " + i + ": " + data[key].name);
);
【讨论】:
使用(每个循环)函数而不是(for循环) 抱歉我没看到 data.each(key,value) console.log("PAIR" + i + ":" + data[key].sysid); console.log("PAIR" + i + ":" + data[key].name); 用这个代替 (forloop) data.each(key,value) 意外令牌 当我删除它时,我得到了意外的令牌 A【参考方案2】:$.ajax(
type: 'POST',
url: '../include/country.php',
dataType : "json",
data:
continentid: id
,
success: function(data)
data= JSON.parse(data);
data.each(key,value)
console.log("PAIR " + i + ": " + value.sysid);
console.log("PAIR " + i + ": " + value.name);
);
【讨论】:
【参考方案3】:试试这个,
success: function(data)
$(data).each(function(i,v)
console.log("PAIR " + i + ": " + v.sysid);
console.log("PAIR " + i + ": " + v.name);
);
var data = [
"sysid": "1",
"code": "140101000",
"name": "China",
"parentid": "1"
,
"sysid": "2",
"code": "140102000",
"name": "Japan",
"parentid": "1"
,
"sysid": "3",
"code": "140103000",
"name": "Hongkong",
"parentid": "1"
];
$(data).each(function(i, v)
console.log("PAIR " + i + ": " + v.sysid);
console.log("PAIR " + i + ": " + v.name);
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
更改一段 php 代码,例如,
if ($stmt->rowCount() > 0)
$country=array();// initialise $country first
while ($selected_row = $stmt->fetch(PDO::FETCH_ASSOC))
$country[] = array('sysid' => $selected_row['sys_id'],'name' => $selected_row['countryname']);
echo json_encode($country);
【讨论】:
相同的结果先生,json 没有 console.log,但第一个元素有 print_r,但第二个元素都存在 从您的 php 代码中删除print_r($country)
。只有echo json_encode()
;当您使用dataType : "json",
时。并且响应必须是json格式
我删除 print_r 相同的东西 no console.log for first for second 有
我需要更改其他,因为我可以看到您只添加初始化吗?我添加初始化然后您的代码相同,为什么会发生这种情况?
@HogRider 你能给我看看你的在线演示吗?如果不是,那么似乎很难指出问题所在。【参考方案4】:
将这一行 $dbh->query("SET CHARACTER SET utf8");
添加到我的配置文件中解决了问题,因此它确实与特殊字符有关,例如 ñ
json_encode 如果有特殊字符则返回 null 值
【讨论】:
以上是关于json 没有价值,但 print_r 有价值 php pdo jquery ajax的主要内容,如果未能解决你的问题,请参考以下文章
在尝试解析 JSON 数据 W/System.err 时出现此错误:org.json.JSONException:对客户没有价值