为什么我的功能没有被调用?

时间:2014-10-30 19:58:51

标签: javascript html ajax

我正在编写一个基本上将数据库作为表加载的脚本。这只是它的准系统版本,但应该涵盖我正在尝试的所有内容。

HTML:

<a href="#" onclick="kiloseqResult=dbload('sample_kiloseq')">Load database</a>

<div id="result_table" style="visibility:hidden;">

    <center>
        <table border="0" cellspacing="3" cellpadding="3" id="summaryTable" class="table table-striped tablesorter">
            <thead>
                <tr style="font-weight: bold; text-align: center;">
                    <th>Well ID</th>
                    <th>Dominant Gene</th>
                    <th>%</th>
                    <th>Secondary Gene</th>
                    <th>%</th>
                    <th>No. of Reads that Mapped</th>
                    <th>No. of Mutations</th>
                    <th>Mutation Information</th>
                    <th>View</th>
                </tr>
            </thead>
            <tbody id="summaryBody">
            </tbody>
        </table>
</div>

使用Javascript:

var kiloseqResult

function dbload(name){
    var r = new XMLHttpRequest();
    r.open("GET", "/db/"+name, true);
    r.onreadystatechange = function () {
        if (r.readyState != 4 || r.status != 200) return;
        kiloseqResult = r.responseText; 
        console.log(kiloseqResult)
        return kiloseqResult
        structureTable();
    };
    r.send()
}

function structureTable(){
    if (kiloseqResult==null){
        throw "Error: no databse defined"
    };

    document.getElementById("summaryTable").style.visibility="visible";
    kiloseqDatabase = JSON.parse(kiloseqResult);

    var table = document.getElementById("summaryBody");

    for (i=0;i<kiloseqDatabase.length;i++){
        var row = table.insertRow(i);
        var cell = row.insertCell(0);
        cell.innerHTML = "Some HTML here"

    };
}

AJAX请求有效,我已经确认了这一点,因此var kiloseqResult中有一个结果加载(我已经在多个位置声明了变量以确保它被加载)。但是dbload()完成后没有调用structureTable(),我似乎无法弄清楚原因。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

点击return语句后,javascript将停止处理您余下的功能,因此return之后的所有行都将被忽略。所以,切换这些的顺序,所以:

    structureTable();
    return kiloseqResult