2016-12-13 142 views
2

我無法將JSON輸出到我的選項卡(用於javascript/jQuery夜間課程任務的一部分)內的HTML表格中。 請有人看看,並建議我需要做什麼樣的修改以表格格式輸出? 我收到了成功警報,但表中沒有填充。輸出JSON到html表格

謝謝。

// Tabs 
$(function() { 
    $("#tabs").tabs(); 
}); 

// Spanish 
$(document).ready(function(){ 
    $.ajax({ 
     url: "http://learn.cf.ac.uk/webstudent/sem5tl/javascript/assignments/spanish.php", // path to file 
     dataType: 'jsonp', 
     jsonp: 'callback', 
     jsonpCallback: 'jsonpCallback', 
     success: function() { 
      alert('success'); 
     }    
    }); 
}); 

function drawTable(data) { 
    for (var i = 0; i < data.length; i++) { 
     drawRow(data[i]); 
    } 
} 

function drawRow(rowData) { 
    var row = $("<tr />") 
    $("#table").append(row); 
    row.append($("<td>" + rowData.course + "</td>")); 
    row.append($("<td>" + rowData.name + "</td>")); 
    row.append($("<td>" + rowData.price + "</td>")); 
} 

和HTML:

<div id="tabs"> 
    <ol start="50"> 
     <li> 
      <a href="#tab-1">Italian</a> 
     </li> 
     <li> 
      <a href="#tab-2">Spanish</a> 
     </li> 
    </ol> 

    <p id="tab-1"></p> 
    <p id="tab-2"> 
     <table id='table'> 
      <thead> 
       <tr> 
        <th>Course</th> 
        <th>Name</th> 
        <th>Price</th> 
       </tr> 
      </thead> 
      <tbody></tbody> 
     </table> 
    </p> 
    <p id="tab-3"></p> 
</div> 
+2

你不會在任何地方調用'drawTable',並且你根本不會從你的ajax調用收到的數據 - 也就是'jsonp:「callback''是多餘的,因爲'callback'是'jsonp的默認值' –

+1

也許'jsonpCallback:'drawTable''會工作 –

回答

1

與您的代碼的主要問題是,你沒有調用任何功能AJAX請求成功完成之後。您至少需要致電drawTable()來填充數據。

但是,您可以對代碼進行若干改進。首先,刪除jsonp: 'callback'。這是默認值,在您提供jsonpCallback時也是多餘的。您也可以將jsonpCallback更改爲'drawTable'。這不需要success處理函數,並且意味着所有的請求數據將直接提供給您的函數drawTable()。最後,不是在內存中創建DOM元素,而是在循環的每次迭代中追加它,使用所有表格的HTML構建單個字符串並在最終完成時追加一次,會更快。

與所有的說,試試這個:

$(document).ready(function() { 
 
    $.ajax({ 
 
    url: "http://learn.cf.ac.uk/webstudent/sem5tl/javascript/assignments/spanish.php", 
 
    dataType: 'jsonp', 
 
    jsonpCallback: 'drawTable' 
 
    }); 
 
}); 
 

 
function drawTable(data) { 
 
    var html = ''; 
 
    for (var i = 0; i < data.length; i++) { 
 
    html += '<tr><td>' + data[i].course + '</td><td>' + data[i].name + '</td><td>' + data[i].price + '</td></tr>'; 
 
    } 
 
    $('#table tbody').append(html); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<table id="table"> 
 
    <thead> 
 
    <tr> 
 
     <th>Course</th> 
 
     <th>Name</th> 
 
     <th>Price</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody></tbody> 
 
</table>

請注意,我這裏降低顯示,只有相關的部分HTML。

+0

**非常感謝。如果我現在想把意大利菜單(italian.php)放在意大利標籤上,我只需要更改網址,還是更復雜? – Tatws24

+0

是的,只是不同的網址,並更改目標'表格'元素來更新 –

1
// Tabs 
$(function() { 
    $("#tabs").tabs(); 
}); 

// Spanish 
$(document).ready(function(){ 
    $.ajax({ 
     url: "http://learn.cf.ac.uk/ webstudent/sem5tl/javascript/assignments/spanish.php", 
    // path to file 
     dataType: 'jsonp', 
     jsonp: 'callback', 
     jsonpCallback: 'jsonpCallback', 
     // The var you put on this func will store data 
     success: function (data) { 
      alert('success'); 
      // Call the function passing the data recieved 
      drawTable(data); 
     }    
    }); 
}); 

function drawTable(data) { 
    for (var i = 0; i < data.length; i++) { 
     drawRow(data[i]); 
    } 
} 

function drawRow(rowData) { 
    var row = $("<tr />") 
    $("#table").append(row); 
    row.append($("<td>" + rowData.course + "</td>")); 
    row.append($("<td>" + rowData.name + "</td>")); 
    row.append($("<td>" + rowData.price + "</td>")); 
} 
+0

歡迎來到Stack Overflow!儘管這段代碼可以解決這個問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! –

+0

我認爲你是對的,我會記住我未來的答案。 – xpeiro