<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    The NoteBook of EricKong

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

    在做AJAX應用開發的時候,我們通常喜歡把服務器端返回的JSON格式字符串在客戶端的回調函數中把它作為JavaScript代碼執行并用一個變量保存起來,以方便使用返回的數據。通常的做法就是var jsonData = eval(xmlHttp.responseText)。這看起來似乎一切都是正確的,但當你運行代碼的時候,你會發現報“invalid labe”錯誤了。為什么?我也不清楚,但我找到了解決這個問題的方法。

    在我剛遇到這個問題的時候也特別頭痛,因為看起來所有編碼是正確的,為了測試出現問題的位置,我逐漸縮小代碼范圍,最終得到如下簡短代碼:

    var jsonStr1 = '{"Name":"Tom","Sex":"Man"}';
    var jsonObj1 = eval(jsonStr1);
    alert(jsonObj1.Name);

    以上代碼執行正是報一開始說的invalid labe錯誤。難道eval函數對某些表達式或對象有限制?于是我又測試了數組對象,代碼如下,結果下面代碼運行很正常:

    var arrStr = '["Tom","Man"]';
    var arrObj = eval(arrStr);
    alert(arrObj[
    0]);

    難道是我機子上的JavaScript解析器就JSON解析方面出了問題,于是我又測試下面代碼,但結果一樣正常:

    var jsonObj = {"Name":"Tom","Sex":"Man"};
    alert(jsonObj.Name);

    最終我還是沒有自行把問題解決,于是根據相關錯誤信息上網搜索答案,沒想到一下子就找到了問題的根源,解決辦法就是“在eval的時候,要先把 JSON字符串值用 ‘()’括號先括起來”。網上找的資料都沒有說明是什么原因,當然我也還是沒有明白正真的原因的。括號是起強制先執行或先運算作用的,返回的JSON就一個完整的對象,中間也沒有表達式,為什么還要加括號!像數組這種較復雜點的對象也能正常eval。沒辦法,就先記著這種用法吧。正確用法如下(注意看eval兩端的括號):

    var jsonStr2 = '{"Name":"Tom","Sex":"Man"}';
    var jsonObj2 = eval('(' + jsonStr2 + ')');
    alert(jsonObj2.Name);

    posted on 2013-10-08 12:56 Eric_jiang 閱讀(381) 評論(0)  編輯  收藏 所屬分類: JavaScript
    主站蜘蛛池模板: 国产香蕉免费精品视频| 四虎影视在线永久免费看黄| 亚洲久悠悠色悠在线播放| 日韩欧美一区二区三区免费观看| 久久亚洲精品11p| 国产V亚洲V天堂A无码| 九九九精品成人免费视频| 黄色一级视频免费观看| 久久青青草原亚洲AV无码麻豆| 免费专区丝袜脚调教视频| 国产亚洲高清在线精品不卡| 亚洲成熟xxxxx电影| 国产免费人视频在线观看免费| 免费萌白酱国产一区二区三区| 亚洲人成综合网站7777香蕉| 精品国产亚洲一区二区在线观看| 色老头永久免费网站| 猫咪免费人成在线网站| 亚洲国产中文在线视频| 亚洲午夜福利在线观看| 日本免费电影一区| 5555在线播放免费播放| h视频在线观看免费| 亚洲中文字幕AV每天更新| 久久久久无码精品亚洲日韩| 日本特黄特黄刺激大片免费| 99视频精品全部免费观看| 色多多www视频在线观看免费| 激情综合亚洲色婷婷五月| 亚洲人成网亚洲欧洲无码久久| 日韩视频在线免费观看| 国产精品入口麻豆免费观看| 久草免费福利在线| 天天综合亚洲色在线精品| 亚洲一区无码中文字幕乱码| 亚洲AV午夜成人影院老师机影院| 免费jjzz在线播放国产| 成人性生免费视频| 91手机看片国产永久免费| 国内精品免费视频精选在线观看 | 亚洲毛片基地日韩毛片基地|