2014-04-08 120 views
0

上。在從我的項目中的一個網頁,我有這樣的jQuery代碼,其中接收兩個JSON字符串,並應增加一些領域我的形式:JSON字符串不顯示我的jsp頁面

<script> 
$("document").ready(function(){ 
    var obj_tipo = jQuery.parseJSON("${lista_tipos}"); 
    var obj_campo = jQuery.parseJSON("${lista_campos}"); 

    var newRow = $('<tr>'); 
    col_1 = '<td> Tipo: </td>'; 
    col_2 = '<td> <select name="tipo"> </select> </td> </tr>'; 
    for(var nome in obj_tipo) 
     col_2.append('<option value="'+nome+'">'+nome+'</option>'); 

    newRow.append(col_1); 
    newRow.append(col_2); 

    $("table.cadastro").append(newRow); 

    col_3 = ''; 
    for(var nome in obj_campo) 
     col_3 += '<tr> <td> '+nome+' : </td> <td> <input type="text" name="'+nome+'" value="'+nome+'" size=20 maxlenght=40> </td> <tr>'; 

    $("table.cadastro").append(col_3); 
}); 
</script> 

但是我的頁面上沒有顯示任何內容。我檢查Chrome的開發者工具,這是由瀏覽器閱讀:

<script> 
$("document").ready(function(){ 
    var obj_tipo = jQuery.parseJSON("{"Tipo":[{"id":3,"nome":"gerente"},{"id":4,"nome":"supervisor"},{"id":5,"nome":"analista"},{"id":6,"nome":"tecnico"},{"id":7,"nome":"secretaria"},{"id":8,"nome":"seguranca"}]}"); 
    var obj_campo = jQuery.parseJSON("{"Key":[{"id":1,"nome":"e-mail"},{"id":2,"nome":"cidade"}]}"); 

    var newRow = $('<tr>'); 
    col_1 = '<td> Tipo: </td>'; 
    col_2 = '<td> <select name="tipo"> </select> </td> </tr>'; 
    for(var nome in obj_tipo) 
     col_2.append('<option value="'+nome+'">'+nome+'</option>'); 

    newRow.append(col_1); 
    newRow.append(col_2); 

    $("table.cadastro").append(newRow); 

    col_3 = ''; 
    for(var nome in obj_campo) 
     col_3 += '<tr> <td> '+nome+' : </td> <td> <input type="text" name="'+nome+'" value="'+nome+'" size=20 maxlenght=40> </td> <tr>'; 

    $("table.cadastro").append(col_3); 
}); 
</script> 

有人可以點我有什麼不對的代碼?

PS:此頁面的完整代碼是這樣的:

https://github.com/klebermo/webapp_horario_livre/blob/master/WebContent/WEB-INF/jsp/usuario/cadastra.jsp

JSON字符串是從這個類的方法 'cadastra' 發送到頁面:

https://github.com/klebermo/webapp_horario_livre/blob/master/src/com/horariolivre/controller/UsuarioController.java

回答

1

有與此部分代碼的一些重大問題(除問題Satpal的答案):

var newRow = $('<tr>'); 
col_1 = '<td> Tipo: </td>'; 
col_2 = '<td> <select name="tipo"> </select> </td> </tr>'; 
for(var nome in obj_tipo) 
    col_2.append('<option value="'+nome+'">'+nome+'</option>'); 

newRow.append(col_1); 
newRow.append(col_2); 

$("table.cadastro").append(newRow); 

首先,創建一個包含全新的<tr>元素的jQuery對象。下一行只是用一個字符串初始化一個變量,到目前爲止確定。

下一行還用字符串初始化變量col_2,這在技術上是可以的。除了接下來你嘗試調用.append()(一個jQuery函數),即使它不是一個jQuery對象。即使它是,你會將它們追加到<td>,而不是<select>,這是你真正想要的。您還在col_2中關閉了</tr>標記,這是不正確的;當您使用.append()(這似乎是一個常見的誤解)時,您不使用HTML字符串,您正在處理實際的DOM元素 - <tr>在創建時已經關閉。

它或許應該看起來更像是這樣的:

var newRow = $('<tr>'); 
col_1 = '<td> Tipo: </td>'; 
col_2 = $('<td></td>'); 
var select = $('<select name="tipo">'); 
for(var nome in obj_tipo) 
    select.append('<option value="'+nome+'">'+nome+'</option>'); 

select.appendTo(col_2); 
newRow.append(col_1); 
newRow.append(col_2); 

$("table.cadastro").append(newRow); 
3
  1. 您需要使用document而不是"document"。閱讀 docs
  2. 也包裹你的JSON字符串在''

使用

$(document).ready(function(){ 
    var obj_tipo = jQuery.parseJSON('${lista_tipos}'); 
    var obj_campo = jQuery.parseJSON('${lista_campos}'); 
...... 
+0

這可能是解釋有用*爲什麼*他們需要使用單引號,而不是雙引號包裹JSON字符串,以防萬一它立即不明顯。 –

+0

謝謝你的回答。我做了你建議的修復,但是這些字段仍然不會顯示在我的頁面上。也許在我附加html標籤的代碼部分有一些錯誤? –

+0

@KleberMota,見安東尼·格里斯特的回答他很好地指出了我錯過的錯誤 – Satpal