<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
    主站蜘蛛池模板: 少妇太爽了在线观看免费视频| 亚洲码欧美码一区二区三区| 一级毛片人与动免费观看| 成人毛片免费观看| 亚洲综合激情九月婷婷| 国产亚洲精品自在久久| 久青草国产免费观看| 亚洲人妻av伦理| 特级做a爰片毛片免费看| 亚洲国产精品国产自在在线| 男女猛烈激情xx00免费视频| 久久精品亚洲福利| 曰韩无码AV片免费播放不卡| 久久亚洲国产成人影院网站| 中文字幕在线免费观看视频| 亚洲AV无码AV男人的天堂| 久久青草免费91线频观看不卡 | 最近中文字幕免费2019| 亚洲视频在线观看网站| 欧美a级在线现免费观看| 亚洲色欲色欱wwW在线| 无码少妇精品一区二区免费动态| 亚洲一区综合在线播放| 1000部国产成人免费视频| 亚洲午夜理论片在线观看| 免费一级毛片不卡在线播放| 成人一级免费视频| 亚洲人成电影亚洲人成9999网| 69堂人成无码免费视频果冻传媒| 亚洲大尺度无码无码专线一区| 亚洲人成无码网站久久99热国产| 99久久免费看国产精品| 亚洲熟妇自偷自拍另欧美| 亚洲国产中文v高清在线观看| 无码国产精品一区二区免费3p| 亚洲天堂免费在线| 18成禁人视频免费网站| 亚洲爆乳无码精品AAA片蜜桃| 亚洲综合精品香蕉久久网| 久视频精品免费观看99| 老司机免费午夜精品视频|