ASP.NET 2.0的做法:
$.each(Sys.Serialization.JavaScriptSerializer.deserialize(response), function(key, item) { alert(item.ProductModel + ' / ' + item.Description); });
以上做法本應是沒有錯誤的,但如果是ASP.NET 3.5的情況下,便會出現錯誤 :
"Sys.ArgumentTypeException: Object of type 'Object' cannot be converted to type 'String'. Parameter name: data"
即使你使用的不是deserialize()方法,而是eval(),都會出現undefined.
![2009510_1.png](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmwL6_lMvDtmtC3HP9jGhLxzdwZcxOHbwPUndw9ctf8BaVuRW5mL9HezcKWXIZo6pPrm_y3-uqchxIfOemGRN-i9B_1x1AUMW1nV_zVl_L4gP2WMc6m4wepMIxmwYvFMIs9K4cFkabu2OO/s1600/2009510_1.png)
這問題搞了我兩天,因為我公司是用ASP.NET 2.0平台,而我家中是3.5平台。程式碼肯定就沒有問題,因為Web Service部份已經設定return成string,而一直都不為意3.5的Web Service會override return的DataType。幸好在Firebug發現了奇妙的"d" :
ASP.NET 2.0, 在Firebug顯示的return values (response) , 在IE8的Develper Tools顯示DataType為String。
![2009510_2.png](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBzkng5E2uLi9g-YnHRTNpCIaa6eY9QKqUeaP7CeMHUdUyUQ1iXJImGxrug7Bq2qrYLEvAGwELiOhKjTCk2Lww5V3t_PTSW11V7EM4RMpJfI2SyV4YhA2YcjyWAAmBVb0q7_9JH4deKpNY/s1600/2009510_2.png)
![2009510_3.png](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpZrZZVX_7n1_KD3X8XXrGqHgj-DE0VnhedqWBQSAUiHUIP0EScD3aFrfOCp06ps6Qr_zh-A_68uy7LfISG06rgQfi1F1PAaybv3AblyPgFcGJhMQPscgF_JZg2P2N4mdOKN2gJ3N_hRl7/s1600/2009510_3.png)
ASP.NET 3.5, 在Firebug顯示的return values (response) , DataType為Object,底下還有"d"的member。
![2009510_4.png](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNL0UVYLm11oJngnpSWN39Dv1lHs8UsgpTntw0rHBuxc9jKD27n8ug0Focss3KOeRePuCg-RwWrV9DFqBFg99caVzdWYpw_eOrJ7VSFWmhi9heDzvfHPpSdUrk0ABF6FmZIXcJ1opDuBAF/s1600/2009510_4.png)
所以最後觸發到我用"response.d"去得出string的值。上網找找"d"是什麼東西,原來也有人遇到同樣問題。
A breaking change between versions of ASP.NET AJAX | Encosia
特別要看看這個comment,完美解釋"d"是什麼東西:
沒有留言:
發佈留言