1. 程式人生 > >ajax伺服器傳值,在前臺解析出現undefined的解決辦法。

ajax伺服器傳值,在前臺解析出現undefined的解決辦法。

轉自:https://blog.csdn.net/mengjian93/article/details/41921427

  一般處理伺服器傳來的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);

           }

        以上就是我遇到的問題自己的一點思考,歡迎指正。