2012-04-18 254 views
1

這是我的JavaScript代碼:的getJSON JavaScript函數返回undefined對象

// action when item file is clicked 
$("li span.file").click(function(){ 

    // get the ID 
    console.log($(this).attr('id')); 

    $.getJSON('BomItemToJSON', function(data) { 
     $.each(data, function(i, item) { 
      var id = item.id; 
      var description = item.description; 

      formObject = document.forms['itemForm']; 
      formObject.elements['itemId'].value = id; 
      formObject.elements['itemDescription'].value = description; 
     }); 
    }); 

}); 

這是我的servlet的一部分:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     utx.begin(); 

     BomHandling bh = new BomHandling(em, utx); 

     BomItem item = bh.getBomItem(63788); 
     Gson gson = new Gson(); 
     String json = gson.toJson(item); 

     System.out.println("Json: " + json); 

     response.setContentType("application/json"); 
     response.setCharacterEncoding("UTF-8"); 
     response.getWriter().write(json); 
     utx.commit(); 
    } 

它返回:

Json: {"itemId":63788,"modules":[],"deprecated":false,"partNumber":"SG-XPCIE8SAS-E-Z","description":"4 GB Memory Expansion (2 x 2GB) low-profile FBDIMMs, Gen 2, 1.8 V, for Sun SPARC Enterprise, RoHS 6. (For Factory Integration Only)","quantity":0,"unitPriceDollar":"$350.00","discount":"10%","totalDollar":"$0.00","itemClass":"Server","itemType":"HW","vendor":"Sun"} 

從控制檯日誌I知道這個servlet叫做:

[09:22:11.633] GET http://localhost:8084/xxx/BomItemToJSON [HTTP/1.1 200 OK 80ms] 

這是我形式

<div id="itemdetail"> 
    <form name="itemForm"> 
     ID: <input type="text" name="itemId" value="" size="100"></input> 
     Description: <input type="text" name="itemDescription" value="" size="100"></input> 
    </form> 
</div> 

我怎樣才能插入的itemId,並從JSON對象描述成我的形式?現在它總是'未定義'。

回答

4

你不需要每個。你的JSON只是一個單一的對象,而不是一個數組。

您的代碼應該是這樣的,我認爲:

// action when item file is clicked 
$("li span.file").click(function(){ 

    // get the ID 
    console.log($(this).attr('id')); 

    $.getJSON('BomItemToJSON', function(data) { 
     alert('entered getJSON()'); 
     var id = data.itemId; 
     var description = data.description; 

     alert('description: ' + description); 

     formObject = document.forms['itemForm']; 
     formObject.elements['itemId'].value = id; 
     formObject.elements['itemDescription'].value = description; 

     alert('done with javascript'); 
    }); 

}); 
1

JSON對象應括號內包裹:{ Json: { ... } } 如果你試圖用jsonLint來驗證您的JSON你可以看到

+0

我認爲錯誤關於這一點,不清楚OP是否說「這是我的Json:」或者這是代碼的一部分。 – 2012-04-18 07:33:23

+0

:)在開始查看與JSON有關的代碼時出現代碼錯誤之前,我通常會仔細檢查返回的結構 – fcalderan 2012-04-18 07:36:10

+0

看看他的servlet代碼,它看起來像是這一行的輸出:'System.out.println(「Json :「+ json);'這可能不是代碼的一部分。 – 2012-04-18 07:37:31