2012-09-05 27 views
0

在我的PHP文件,我有以下代碼無法與效果,請使用JSON.parse從json_encode

//create SQL to select schedule 
$sql = "SELECT * FROM `Schedule`"; 

//create result set 
$result = mysql_query($sql); 

$result_array[] = ""; 
while($row = mysql_fetch_assoc($result)) 
{ 
    $result_array[$row['ID']] = $row; 
} 

echo json_encode($result_array); 

在我的HTML文件中,我有以下代碼

xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    var schedArray = JSON.parse(xmlhttp.ResponseText); 

    alert(schedArray[0]["ID"]); 
    } 
    } 
    xmlhttp.open("GET","getSchedule.php?q="+year,true); 
    xmlhttp.send(); 

當我運行我的HTML代碼我得到這個錯誤:Uncaught SyntaxError:意外的代幣ü

我相信我的數據編碼正確,因爲運行

document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 

在我準備狀態檢查網我用正確的數據數組:

{"0":"","1":{"ID":"1","Team":"Louisiana-Monroe","playDate":"2011-09-03","Conference":"Sun Belt","Rank":null,"Bowl":"0","Site":"H"},"3":{"ID":"3","Team":"Oklahoma","playDate":"2011-09-17","Conference":"Big 10","Rank":"1","Bowl":"0","Site":"H"},"4":{"ID":"4","Team":"Clemson","playDate":"2011-09-24","Conference":"ACC","Rank":"21","Bowl":"0","Site":"A"},"5":{"ID":"5","Team":"Wake Forest","playDate":"2011-10-08","Conference":"ACC","Rank":null,"Bowl":"0","Site":"A"},"6":{"ID":"6","Team":"Duke","playDate":"2011-10-15","Conference":"ACC","Rank":null,"Bowl":"0","Site":"A"},"7":{"ID":"7","Team":"Maryland","playDate":"2011-10-22","Conference":"ACC","Rank":null,"Bowl":"0","Site":"H"},"8":{"ID":"8","Team":"North Carolina State","playDate":"2011-10-29","Conference":"ACC","Rank":null,"Bowl":"0","Site":"H"},"9":{"ID":"9","Team":"Boston College","playDate":"2011-11-03","Conference":"ACC","Rank":null,"Bowl":"0","Site":"A"},"10":{"ID":"10","Team":"Miami (FL)","playDate":"2011-11-12","Conference":"ACC","Rank":null,"Bowl":"0","Site":"H"},"11":{"ID":"11","Team":"Virginia","playDate":"2011-11-19","Conference":"ACC","Rank":null,"Bowl":"0","Site":"H"},"12":{"ID":"12","Team":"Florida","playDate":"2011-11-26","Conference":"SEC","Rank":null,"Bowl":"0","Site":"A"},"13":{"ID":"13","Team":"Notre Dame","playDate":"2011-12-29","Conference":"IND","Rank":null,"Bowl":"1","Site":"N"},"14":{"ID":"14","Team":"Murray State","playDate":"2012-09-01","Conference":"Ohio Valley","Rank":null,"Bowl":"0","Site":"H"},"15":{"ID":"15","Team":"Savannah State","playDate":"2012-09-08","Conference":"MEAC","Rank":null,"Bowl":"0","Site":"H"}} 

我想不通爲什麼我收到此錯誤。我沒有使用JQuery,並且在我的JavaScript中包含了json2.js。任何人可以提供的幫助都會很好。

+1

您的縮寫可能隱藏了JSON中的實際錯誤。還有真正用作屬性名稱的空字符串嗎? – Pointy

+0

你可以在編碼後發佈JSON嗎? – LmC

+1

多數民衆贊成沒有任何幫助,你可以提供您正在嘗試解析的完整JSON – LmC

回答

2

你的問題,我認爲,在這裏:

應該responseText,小寫字母 「R」。發生什麼事是字符串"undefined"是解析器實際上試圖解釋的內容,而以「u」開頭的字符串不能是有效的JSON。

你在填充調試元素以顯示響應的代碼中是正確的。

+0

+1,確實不錯,我只看了最後一個'responseText' :) – Jon

+0

那幫了!我將其更改爲小寫字母r,並停止發現該錯誤。不幸的是,我現在得到意外的標記<當我註釋掉JSON.parse行時,我不會收到錯誤。 – evenflow58

+0

那麼你發佈的JSON中沒有'<'字符,所以這沒有什麼意義。 – Pointy

0

構造結果的代碼是錯誤的。它應該閱讀:

$result_array = array(); 
while($row = mysql_fetch_assoc($result)) 
{ 
    $result_array[$row['id']] = $row; 
} 
+0

我在那裏添加Num的原因是因爲我只返回一個結果。我相信它會覆蓋$ result_array。我的'echo json_encode($ result_array)'的輸出是{「0」:「」,「」:{「ID」:「15」,「Team」:「Savannah State」,「playDate」:「 2012-09-08「,」Conference「:」MEAC「,」Rank「:null,」Bowl「:」0「,」Site「:」H「}} – evenflow58

+0

@ evenflow58:在這種情況下,唯一的解釋是原始代碼是誤導性的,'$ row'不*具有'id'鍵。你確定它是'id'而不是'ID'嗎?什麼是表格列的*精確*名稱? – Jon

+0

@Jon我認爲我發現了這個問題,但我同意你的觀點,即響應對象的構建方式有問題。 – Pointy