为什么这个简单的JSON编码不起作用?

时间:2011-09-15 21:16:31

标签: php jquery json

我有一个生成JSON对象的PHP页面。 我有一个页面,使用jquery库,我想从中访问该对象。 但它不起作用。我看到消息'inside_nk'而不是'inside_ok'。为什么? 我试图尽可能简化我的代码。

prueba.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/prueba.js"></script>
</head>
<body>
</body>
</html>

prueba php

<?php
header('Content-type: application/json; charset=utf-8');

class c1 {
    var $i = 0;
    var $e = 1;
    function c1() {}
}

$inst_c1 = new c1();

echo json_encode($inst_c1);
?>

prueba.js

$(document).ready(function() {
alert('begin');
$.ajax({
    url: 'http://[myserver]/prueba.php',
    dataType: 'json',
    data: '',
    success: function (data) { alert('inside_ok'); },
    error: function (data) { alert('inside_nk'); },
});
alert('end');
});

请注意:  我尝试了"url: 'http://[myserver]/prueba.php?callback=?',"

 "dataType: 'jsonp'". 
 http://[myserver]/prueba.php

的工作原理。我用萤火虫检查了。

3 个答案:

答案 0 :(得分:0)

如果您要使用json_encode,我认为最好在array()而不是对象上使用它:

$out = array("i" => 0, "e" => 1);
echo json_encode($out);

答案 1 :(得分:0)

是否与您的类在其类中命名相同的函数有关,或者您没有指定要访问的类?通常你必须做这样的事情:

// PHP 5.3
class classy{

    function classyfn(){

    }
}
$inst_c1 = new classy.classyfn();   

也许你的$ inst_c1对它正在调用的内容感到困惑,或者不知道在哪里找到这个函数?

如果你取出json_encode,它输出的东西只有一个回声?如果没有,那就表明它是同一个类和fn名称的问题。

答案 2 :(得分:0)

我认为这是浏览器的一个问题。我的是Firefox 7.01,它的工作正常。

从PHP(5.3.4)脚本获得的输出是

{"i":0,"e":1}

这是有效的JSON,因此它不会有任何问题。