使用ajaxcall接收json数据的未定义错误

时间:2009-06-24 07:41:41

标签: php jquery ajax json

我的问题是我 无法解决这个问题

如果我调用php脚本,我得到的是一个未定义的错误

这是我用来测试AND的代码

this is the original code from the creator that is giving me a headache

function startJsonSession(){     
    $.ajax({        url: "jsontest.php?action=startjson",       
        cache: false,     
        dataType: "json",   
         complete: function(data) {             
             username = data.username;               
              alert(username);      
         }    
    });
}

//phpscript

if ($_GET['action'] == "startjson") { startJson(); } 


    function startJson() {   

header('Content-type: application/json'); 
    $items = '';     
echo json_encode(array(          
     "username" => "bob",    
    "items" => array( "item1" => "sandwich",   
    "item2" => "applejuice"  
    )     
    )); 


 }
谢谢,理查德

编辑我的问题是因为:
此函数以不同的方式返回json数据 因此,下面给出的解决方案没有相同的结果。

function startChatSession() {
    $items = '';
    if (!empty($_SESSION['openChatBoxes'])) {
        foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) {
            $items .= chatBoxSession($chatbox);
        }
    }


    if ($items != '') {
        $items = substr($items, 0, -1);
    }

header('Content-type: application/json');
?>
{
        "username": "<?php echo $_SESSION['username'];?>",
        "items": [
            <?php echo $items;?>
        ]
}

<?php


    exit(0);
}

4 个答案:

答案 0 :(得分:1)

我用你的代码重新创建并弄明白了。返回的对象是XMLHttpRequest类型。它有一个名为responseText的属性,它包含一个包含数据的json字符串。

所以这有效..

var decodedData = eval("(" + data.responseText + ")");
                username = decodedData.username;               
                      alert(username);      

有点乱,但它有诀窍: - )

p.s如果有帮助,我在firefox中使用firebug并在js代码中粘贴断点

编辑如下: 不想做eval,你可以使用它并且它可以工作:

$.getJSON("json.php?action=startjson",       

            function(data) {             
                username = data.username;               
                      alert(username);      
             }    
        );

编辑以显示我对成功功能所做的事情:

    $.ajax({        url: "json.php?action=startjson",       
            cache: false,     
            dataType: "json",   
             success: function(data) {             

                username = data.username;               
                      alert(username);      
             }    
        });

答案 1 :(得分:0)

用户名是全局变量吗? 如果不是,您应该添加“var”关键字。

username = data.username - &gt; var username = data.username;

答案 2 :(得分:0)

另外我不明白的是它突破了php模式,而不是回复它像xml一样

?>
{
        "username": "<?php echo $_SESSION['username'];?>",
        "items": [
            <?php echo $items;?>
        ]
}

<?php

与上面相同(包含文字数组的对象数组)?

echo json_encode(array(          
             "username" => "bob",    
             "items" => $items
        )     
             ));  
 }

答案 3 :(得分:0)

最后我开始工作了。

我安装了firebug,发现php脚本正在返回html标题而不是json。

突然间它开始工作,我真的很想知道问题是什么,但我不能告诉你。

无论如何,感谢坚持这么久,大卫