JSON对象undefined

问题描述:

我有一个AJAX页面请求,它使用一个用于处理对我的MySQL数据库的查询的php文件。这个php文件工作得很好,但由于某种原因,它对我来说并不好。下面是我有:JSON对象undefined

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]); 
} 
+0

你可以发布你的服务器端代码吗? – 2012-03-27 21:18:36

+0

也如果你console.log()你都得到了什么? – 2012-03-27 21:18:54

+0

也许你没有在dataType中使用大写T ...... – Timmerz 2012-03-27 21:37:39

你是否试过在ajax调用中在dataType中使用大写字母T?

你应该console.log(data)相反,有了这个,你可以看到,你可以用它来访问数据的密钥。

尝试使用数据,而不是data.results的或针对data.id或data.area,看看它与

出现如果它表明你在警报弹出一个字符串,这意味着该数据是字符串,而不是JSON。 对于JSON,它显示[Object object]。

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

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

+0

这很有趣,但根据jQuery文档的数据类型:'json',应该为你解除...你可以发布你的服务器端代码吗? – 2012-03-27 21:18:29

+0

确定它在那里 – mavix 2012-03-27 21:44:54

我不认为它会回来的解析json..it的回来作为一个字符串。我相信

使用:

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

它应该,但。该文件说,数据类型:'json'返回一个JSON对象,而不是一个字符串。 – mavix 2012-03-27 21:44:23

+0

你是否尝试在dataType中使用大写的T,在ajax调用上呢? – Timmerz 2012-03-27 21:48:23

+0

啊,这就是问题所在。 – mavix 2012-03-27 21:53:16

正如尤金指出,数据是一个字符串。尝试评估:

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

编辑:这工作,但jQuery.parseJSON可能更酷。