2012-03-27 260 views
2

我有一個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

回答

1

你是否試過在ajax調用中在dataType中使用大寫字母T?

1

你應該console.log(data)相反,有了這個,你可以看到,你可以用它來訪問數據的密鑰。

0

嘗試使用數據,而不是data.results的或針對data.id或data.area,看看它與

2

出現如果它表明你在警報彈出一個字符串,這意味着該數據是字符串,而不是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

1

我不認爲它會回來的解析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

0

正如尤金指出,數據是一個字符串。嘗試評估:

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

編輯:這工作,但jQuery.parseJSON可能更酷。