2012-10-12 32 views
0

我正在向我的jQuery函數腳本返回一個JSON數組,但似乎無法獲得正確的語法 - 即使在閱讀了這裏的十幾個不同示例之後。如何解析jQuery中的這個JSON返回值?

這裏是調用jQuery的AJAX功能:

$.ajax({ 
    url: "fetchAlleles.php", 
    datatype: 'json', 
    data: {'mndx': mndx, 'sndx': sndx }, 
    success: function(rtnval) { 
     alert("success: allele_1="+rtnval['allele_1']+", allele_2="+rtnval['allele_2']); 
     //alert(rtnval); 
    }, 
    error: function() { alert('Error!'); } 
    }); 

這裏是PHP代碼,返回值:

echo "{"; 
echo "allele_1: ", json_encode($ary[0]), "\n"; 
echo "allele_2: ", json_encode($ary[1]), "\n"; 
echo "run_date: ", json_encode($ary[2]), "\n"; 
echo "}"; 

如果我用我的警覺調試語句,我可以看到真實返回什麼是我所期望的:

{allele_1: "440" 
allele_2: "480" 
run_date: null 
} 

,但什麼事我嘗試讀取JSON裏面的值對象回來了 「不確定」,無論是

alert("success: allele_1="+rtnval['allele_1']+", allele_2="+rtnval['allele_2']); 

alert("success: allele_1="+rtnval.allele_1+", allele_2="+rtnval.allele_2); 

alert("success: allele_1="+rtnval['allele_1'][0]+", allele_2="+rtnval['allele_2'][0]); 

希望有人能幫助 - 這是可氣! (JSON願望語法更明顯!)

感謝了, rixter

回答

2

如果您datatype - >dataType你的json將被jQuery解析。

$.ajax({ 
    url: "fetchAlleles.php", 
    dataType: 'json', 
    data: {'mndx': mndx, 'sndx': sndx }, 
    success: function(rtnval) { 
     alert("success: allele_1="+rtnval['allele_1']+", allele_2="+rtnval['allele_2']); 
     //alert(rtnval); 
    }, 
    error: function() { alert('Error!'); } 
}); 
1

使用JSON.parse(rtnVal)此功能在所有最新的瀏覽器和可轉換字符串JSON

+0

是的,parseJSON(rtnval)工作...見下文。 – rixter

3

您的JSON內容不似乎是有效的JSON - 你應該有周圍的字段名引號像

{ "allele_1": "value", ... } 
+1

更重要,它缺少逗號:) – h0tw1r3

2

PHP json輸出無效,因爲它不包含逗號。

更改PHP的輸出:

echo json_encode(array(
    'allele_1' => $ary[0], 
    'allele_2' => $ary[1], 
    'run_date' => $ary[2] 
)); 
+0

謝謝!它幫助.. – rixter

1

好了,所以有兩兩件事我想建議給你。

首先。當您將您的值從PHP返回到JavaSctipt時,您只需執行一條json_encode()命令。只需在常規PHP數組中構建數據(是的,它可以是嵌套數組)。

只需在腳本末尾執行一個echo json_encode($data)即可。

其次,如果您正在處理對象,那麼您將需要使用點語法使用JavaSctipt訪問該數據。處理數組時,可以使用方括號(鍵)語法。

  • { 'key1':'value1' }
    在這裏,你會用data.key獲得value1

  • { 'key1':[ 'array_value1', 'array_value2', ... ] }
    在這裏,你會用​​得到array_value2

+0

是的,我用這個......謝謝! – rixter

1

首先,和其他人一樣,您的JSON無效。 它應該是這樣的:

{ 
"allele_1": "440", 
"allele_2": "480", 
"run_date": null 
} 

,如果你不知道你的JSON,請嘗試使用類似jsonlint,它會檢查它。

你在php中使用json_encode()的方式也似乎有點奇怪。將所有內容放入單個數組並將json_encode整個數組一次更好會更好。您可以通過結構化數組中的PHP這樣重新創建JSON結果:

$json_output = array(
    'allele_1' => '440', 
    'allele_2' => '480', 
    'run_date' => null 
); 

echo $json_output; 

而在去年,你所訪問您的$就回應的方式不正確,您所訪問的數據,如它是一個數組,但它是一個對象。

success: function(rtnval) { 
    alert("success: allele_1="+rtnval.allele_1+", allele_2="+rtnval.allele_2); 
} 

試試吧。

+0

謝謝;這很有幫助。但PHP中的「新數組」應該只是「數組」。另外,只有當我通過jQuery.parseJSON()運行它時,對象表示法才起作用... ...見下面...但是再次感謝。 --rixter – rixter

+0

不客氣,你是對的「新陣列」我做了一個編輯,當涉及到PHP時,我犯了很多錯誤,感謝通知:)我認爲JQuery會照顧當你輸入'json'作爲數據類型時,解析json本身,現在我明白了爲什麼這不適合你。這是因爲你輸入了'datatype',它應該是'dataType',你錯過了大寫字母T,所以parseJSON()這個步驟就沒有必要,就像Kevin B已經提到的那樣。 – jchn