返回列表 發帖

JSON從Webserver接收問題

小弟昨天在網路上看範例得知這個技術 也確定web servser 有傳遞 json型式的資料 到網頁前端(小弟用(HTTPWATCH)確認過)
簡單的程式碼如下
function loadCities() {
$.ajax({
            type: "POST",
            url: "WebService.asmx/getcust",
            contentType: "application/json; charset=utf-8",
            data: "{}",
            dataType: "json",
            success: fillCities,
            error: loadCityFail     
        });

    }
    function fillCities(val) {
       val = eval("(" + val + ")");        <---網頁在執行的時候 此行一直出現問題 煩請各位大大幫忙解決問題 感激不盡...
    }
    function loadCityFail() {
        alert("發生錯誤");
    }
   
    $(document).ready(function() {
        $('#b1').click(function() {
        loadCities()
        });

    });
  

</script>

若 server 回傳的格式沒問題,那麼 val 已經是 JSON 的格式囉,不用 eval()
To infinity and beyond!

TOP

那如果JSON要轉成陣列作輸出 該怎寫呢 可以請教一下嗎 因為我取不出資料 一值顯示有錯...

TOP

dataType 可以先指定為 text 然後 alert() 出來看看是不是有收到正確的資料

再看看是 array 還是 object,處理方式有點不太一樣
To infinity and beyond!

TOP

function fillCities(val) {
        alert(val);        
    }
會出現訊息視窗 object Object

小弟還有用網路提供的一種 看變數的方式
  function fillCities(val) {
              dump(val, false);
    }
出現資料視窗如下
[{"custid":"12345678","custname":"賴壬崴","custimage":"image/image1.jpg"},{"custid":"6879348","custname":"謝松翰","custimage":"image/image2.jpg"},{"custid":"9856712","custname":"許義明","custimage":"image/image3.jpg"},{"custid":"7896231","custname":"王炫英","custimage":"image/image4.jpg"}]
應該是有資料沒錯  那我該如何轉成javascruipt可以使用的陣列呢?

TOP

val 已經是一組 array,裡面是一個個 object

val[0]['custid'] = '12345678'
val[0]['custname'] = '賴壬崴'
可依此類推
To infinity and beyond!

TOP

{"d":"[{\"custid\":\"12345678\",\"custname\":\"賴壬崴\",\"custimage\":\"image/image1.jpg\"},{\"custid\":\"6879348\",\"custname\":\"謝松翰\",\"custimage\":\"image/image2.jpg\"},{\"custid\":\"9856712\",\"custname\":\"許義明\",\"custimage\":\"image/image3.jpg\"},{\"custid\":\"7896231\",\"custname\":\"王炫英\",\"custimage\":\"image/image4.jpg\"}]"}

這個是我用httpwatch 看到的資料 "d":<----這個好像是多餘的 但是不知道為什麼總是會出現
小弟我是用VS2008 ASp.NET 開發的 是否有人遇到跟我相同的問題

小弟發現要加上 val = eval('('+val['d']+')'); 才能讀取到資料 但是這終究是個鳥辦法....有大大知道這是怎一回事
或者 該如何解決的嗎

[ 本帖最後由 x781523 於 2009-10-16 17:24 編輯 ]

TOP

應該不需要 eval(),改用這樣應該還是可以讀得到:
val['d'][0]['custid'] = '12345678'
val['d'][0]['custname'] = '賴壬崴'

看起來 "d": 是多餘的沒錯,如果要去掉,得從 server 端著手,在轉 JSON 前的把資料格式弄正確。
To infinity and beyond!

TOP

返回列表 回復 發帖