ajax獲取json數據為undefined--原因解析


  問題:

        1. 碰到一個問題ajax成功獲取json數據后,取值顯示undefined,通過eval函數轉一次即可成功獲取json數據值,如果不通過,可以參考如下轉兩次;

        2.表單保存后,重新ajax請求數據又報Uncaught SyntaxError:錯誤,經過分析原來是表單保存后ajax返回的數據竟然是json數據Object類型,故不需要eval()函數轉對象;所以直接加入以下判斷

            是字符串才eval(): 

            

 $.ajax({
           url: "company/credit/infoB",
           type: "POST",
           data:{company:a,contractObject:b,receivables:c},
           dataType: 'JSON',
           success: function(result){
               var obj;
              //判斷是否是json格式
              if((typeof result=='object')&&result.constructor==Object){
                  obj=result;
              }else{
                  obj  = eval("("+result+")");
              }

  

 

     一般處理服務器傳來的json值時,我們都會用兩種方式進行處理:1.一種為使用eval()函數。var dataObj=eval("("+data+")");//轉換為json對象(注:data為json數據);2. 使用Function對象來進行返回解析。var json =(new Function("","return "+data))();

       但是今天做項目(項目用struts2)時用這兩種方法進行json讀取,輸出時一直是undefined。上網查了許多資料,大多都說不明白,后來查到一篇文章作者也遇到這種情況,他解決的辦法是在action中將返回值聲明json屬性,在自己的項目上測試后不通過,后來解決的辦法是再轉一次。以下是自己的思考:從后台傳來的數據雖然聲明為json屬性,但是傳到前台時其實還是一個字符串,不是一個json對象,這時候我們需要對后台的數據進行處理,轉化為json對象,然后獲取json中的值。但是有時候后台傳來的值不一定是標准的json格式的字符串,雖然我們通過前面的兩種方法之一轉化后台傳來的對象,但是這時候轉化的json對象實際上還是一個字符串,是一個標准的json字符串,我們再一次轉換后就成了一個json對象。

      以下是部分代碼:

           result = JSONObject.fromObject(map).toString();//后台代碼,將map轉成json對象

           success : function(result) {//前台返回值代碼
var obj = eval("("+result+")");
//var data1 =(new Function("","return "+obj))();
var data1=eval("("+obj+")");
alert(data1.name);

           }

參考鏈接:http://www.cnblogs.com/myjavawork/archive/2011/03/10/1979279.html

                 http://blog.csdn.net/mengjian93/article/details/41921427


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM