2016-12-13 18 views
2

javascript/jQueryの夜間コースの割り当ての一部として、自分のタブ内のHTMLテーブルにJSONを出力できません。 誰かが見て、テーブル形式で出力するためにどのような修正が必要か教えてください。 成功アラートが表示されますが、テーブルにデータが入力されません。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を含む単一の文字列を作成し、終了時に一度追加する方がはるかに迅速です。私は唯一の関連する部分に、ここで示した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>

注:これを試して、言ったことすべてで

+0

**ありがとうございます。私が今イタリアのメニュー(italian.php)をイタリアのタブに置いて欲しいと思ったら、単にURLを変更すればいいのですか、それとももっと複雑なのでしょうか? – Tatws24

+0

うん、ちょうど別のURLと更新するターゲットの 'table'要素を変更する –

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

ようこそ!このコードスニペットは問題を解決するかもしれませんが、[説明を含む](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。あなたのコードに説明的なコメントを詰め込まないようにしてください。これは、コードと説明の両方の可読性を低下させます! –

+0

私はあなたが正しいと思う、私は将来の答えに留意するつもりだ。 – xpeiro

関連する問題