【发布时间】:2014-02-28 18:29:28
【问题描述】:
使用 PHP 和 Javascript 使用 JSON 编码/解码数据的正确方法是什么
我的 PHP 很简单:
session_start();
header('Content-type: application/json');
echo json_encode($_SESSION['orl']);
文本中的简单名称值对,没有对象或任何东西。
我的 JavaScript 是
function checkForSeshStuff(){
window.alert("check sesh called");
GM_xmlhttpRequest({
method: "GET",
url: "http://internal.example.com/orl_get_sesh.php",
onload: function(response) {
window.alert(response.responseText);
var obj = JSON.parse(response.responseText);
window.alert(obj.count);
if(obj.count > 1){
document.getElementById('ajaxSeshStat').innerHTML = "<input type='button' onclick='loadLastSesh();' value='Populate "+obj.count+" Fields' />";
document.getElementById('ajaxSeshStat').style.display = "block";
}
}
});
}
我有一堆用于调试的警报,第三个警报每次都会提醒 JSON 计数警报“未定义”。
我是否在我的 PHP 中使用了正确的 mime 类型?我在我的 JS 中正确解析了吗?怎么了?
编辑 这是PHP生成的JSON数据字符串
{"BodyContent_ctl00_ctl00_chRead":"on","BodyContent_ctl00_ctl00_txtOfferCode":"xc","BodyContent_ctl00_ctl00_txtFirstName1":"cx","BodyContent_ctl00_ctl00_txtCity1":"Beverly Hills","BodyContent_ctl00_ctl00_txtZip1":"90210","BodyContent_ctl00_ctl00_txtMonthlyIncome1":"0","BodyContent_ctl00_ctl00_txtOtherIncome1":"0","BodyContent_ctl00_ctl00_chbCoBorrowerContactInformation":"on","BodyContent_ctl00_ctl00_txtMonthlyIncome2":"0","BodyContent_ctl00_ctl00_txtOtherIncome2":"0"}
【问题讨论】:
-
response.responseText 的警报显示什么?如果除了 json 之外还有其他内容,解析将失败。例如php 警告。
-
您确定
$_SESSION['orl']具有count属性吗? -
@ExplosionPills
$_SESSION['orl']是一个数组,所以是的 -
如果您使用
console.log(response)而不是警报,您可以在浏览器的控制台中看到整个响应,并且可能会更好地了解正在发生的事情。 -
@Adelphia PHP 数组不会自动拥有
count属性......也许你应该从它开始。另请注意,JSON 中缺少count。
标签: javascript php json decode encode