JSON对象未定义

时间:2012-03-27 21:10:57

标签: jquery mysql ajax json

我有一个AJAX页面请求,它使用一个用于处理MySQL数据库查询的php文件。 php文件工作正常,但由于某种原因,它对我不好。这就是我所拥有的:

    function updateForm(){
        ID = $('#listings').val();
        $.ajax({
            type: "POST",
            url: 'query.php',
            data: "query=true" +
                    "&id=" + ID,
            datatype: 'json',
            success: function(data) {
                alert(data);
                updatePreview();
            }
        });
    }

给我一​​个弹出窗口:

{"results":[{"ID":"12","area":"Hoboken","bedrooms":"5","fullbath":"3","halfbath":"1","remarks":"No remarks to speak of.","sqft":"2500","photos":null,"price":"1000","fee":null,"realtor":"Jane Doe","phone":"555-555-5555","address":"10th & Willow","bix":"1"}]}

但是一旦我改为:

    function updateForm(){
        ID = $('#listings').val();
        $.ajax({
            type: "POST",
            url: 'query.php',
            data: "query=true" +
                    "&id=" + ID,
            datatype: 'json',
            success: function(data) {
                alert(data.results);
                updatePreview();
            }
        });
    }

弹出窗口只是说未定义。

最终,我想解析信息并相应地更新我的页面,但我似乎无法访问此JSON对象的任何属性。发生了什么事?

编辑:

这是php文件中的代码:

if (isset($_POST['query'])){
    if (isset($_POST['id'])){
        $query = 'SELECT * FROM bix WHERE ID=' . get_post('id');
        $listing = mysql_query($query);
        print_json($listing);
    }
}
function print_json($var){
    $output = array();
    while($row = mysql_fetch_assoc($var)) {
        $output["results"][] = $row;
    }
    echo json_encode($output);
}

function get_post($var)
{
    return mysql_real_escape_string($_POST[$var]);
}

6 个答案:

答案 0 :(得分:2)

如果它在警告弹出窗口中显示一个字符串,则表示数据是字符串,而不是JSON。 对于JSON,它显示[Object object]。

检查响应类型。它应该是applicaton / json或applicaton / javascript,而不是text / plain或类似的东西。

更新:还要确保服务器不会在引号中返回整个字符串。例如。 “[..]” - 它只是一个字符串。因此,请使用FireBug或Chrome开发者工具查看实际响应。它可能有助于理解为什么jQuery无法正确处理它。

答案 1 :(得分:1)

您应该console.log(data),相反,您可以看到可用于访问数据的密钥。

答案 2 :(得分:1)

我不认为它会像解析的json那样回来......我相信它会以字符串的形式回归......

使用:

var x = jQuery.parseJSON(data);
alert(x.results)

答案 3 :(得分:1)

你是否已尝试在ajax调用中大写数据类型中的T?

答案 4 :(得分:0)

尝试使用数据而不是data.results或定位data.id或data.area,看看它出现了什么

答案 5 :(得分:0)

正如Eugene指出的那样,数据是一个字符串。试试eval:

var stuff = eval(data);
alert(stuff.results);

编辑:这有效,但jQuery.parseJSON可能更酷。