Jquery 为什么警报(json[0].subject);给出未定义的?

Jquery 为什么警报(json[0].subject);给出未定义的?,jquery,json,Jquery,Json,我有以下代码: <script> $(document).ready(function() { refresh(); }); function refresh() { $.get('getMessageDetails.php', function (json) { alert(json); alert(json[0].subject);

我有以下代码:

 <script>
    $(document).ready(function()
    {
        refresh();
    });

    function refresh()
    {      
        $.get('getMessageDetails.php', function (json) {
            alert(json);
            alert(json[0].subject);
        },"json");
        window.setTimeout(refresh,30000);
    }   
</script>
哪个是正确的

但是
alert(json[0].subject)给出未定义的

请帮忙?
谢谢

如果您的第一个警报显示了您所说的内容,那么您的
json
变量的内容不会被视为json-如果是,您会在警报中看到
[object object]
。检查

所以您需要指定返回的是json(您这样做);但是您还应该确保PHP发送了正确的响应头。在发送输出之前,添加下面的第一行:

header('Content-type: application/json');
echo json_encode($last_unopened_message_row); 

必须将json变量转换为正确的json格式变量

目前它是一个字符串变量

您必须按照以下方式使用它:

<script>
    $(document).ready(function()
    {
        refresh();
    });

    function refresh()
    {      
        $.get('getMessageDetails.php', function (json) {
            alert(json);  // this is a string variable.
            json = $.parseJSON(json);  //now json varible is in correct json format.
            alert(json.subject); //you can call it dirctly like a associative array. No need to include '[0]'.
        },"json");
        window.setTimeout(refresh,30000);
    }   
</script>

$(文档).ready(函数()
{
刷新();
});
函数刷新()
{      
$.get('getMessageDetails.php',函数(json){
警报(json);//这是一个字符串变量。
json=$.parseJSON(json);//现在json变量的json格式正确了。
alert(json.subject);//您可以像关联数组一样直接调用它。无需包含“[0]”。
}“json”);
设置超时(刷新,30000);
}   

您的JSON解析似乎不正确。尝试改用
getJSON

$.getJSON('getMessageDetails.php', function (json) {
   alert(json);
   alert(json[0].subject);
});

你为什么不使用$.getJSON():?我对这一切都很陌生,不知道怎么做。通读你给我的链接,但是很复杂……我不知道从哪里开始使用getJSON修改我的所有代码。我调用的文件是a.php,因为我需要从数据库表中获取值…仅供参考:这个网站是一个移动网站,但它确实可以工作:yikes,那么我不知道…为什么我没有定义呢?我很沮丧……如果你能使用$.get,那么升级到$.getJSON应该不会太难(实际上它会更容易,因为它会自动为你处理JSON!!!)。请参阅jQuery文档上的示例以及它们如何处理调用返回的数据。猫的例子在不久前帮助了我很多…我复制并粘贴了警报中的内容。。我注释掉标题行只是为了检查…我已经将其放回alert now gives[]???因此,我错了-即使是正确的标题也不能强制进行正确的类型转换。在这种情况下,遵循@Rocket的建议,或者至少按照Pavan Agarwal所说的去做。看起来,当您尝试发送正确的(json)头时,根本不会发送任何输出。这可能是关闭错误报告和某个地方发生致命错误的组合。因此,要么调查造成死亡白屏的原因,要么作为一种(糟糕的)解决方法,忘记发送正确的头,只发送文本-客户端输出。但是,使用
json=$.parseJSON(json)解析json
正如@Pavan Agarwal建议的那样。alert不显示任何内容:)在firebug中,response选项卡只显示[]如果要使用
parseJSON
,则不需要
get
末尾的“json”
<script>
    $(document).ready(function()
    {
        refresh();
    });

    function refresh()
    {      
        $.get('getMessageDetails.php', function (json) {
            alert(json);  // this is a string variable.
            json = $.parseJSON(json);  //now json varible is in correct json format.
            alert(json.subject); //you can call it dirctly like a associative array. No need to include '[0]'.
        },"json");
        window.setTimeout(refresh,30000);
    }   
</script>
$.getJSON('getMessageDetails.php', function (json) {
   alert(json);
   alert(json[0].subject);
});