0

所以我有一个“场景”,由很多“表单”组成,其中包含很多“事件”和“数据”等。为了填充所有这些信息,我在页面中设置了这些信息,以便在页面完成后运行

$(document).ready(function() {
var scenarioID = ${testScenarioInstance.id}
var myData = ${results as JSON}
populateFormData(myData, scenarioID);
});

然后调用下面的函数(第一个调用第二个,这样做是因为我遇到了一个问题,因为它是 ajax,循环中的变量在添加内容之前正在更新,因此所有内容都在最后一个子表中结束): -

function populateFormData(results, scenarioID) {
    $table = $('#formList')
    for ( var i in results) {
        var formIDX = (results[i]["forms_idx"])
        var formID = (results[i]["form_id"])
        appendSubTable(formIDX, scenarioID, $table, formID);
    }
}
    function appendSubTable(formIDX, scenarioID, $table, formID) {
    var url = "http://localhost:3278/FARTFramework/testScenario/ajaxPopulateSubTables"
    $.post(url, {
        formIDX : formIDX, scenarioID : scenarioID, formID :formID 
    }, function(data) {
        var $subTable = $table.find("#" + formIDX).find('td:eq(1)').find("div").find("table")
        $subTable.append(data)
    }).fail(function() {
        alert("it failed!")
    });
}

然后它会像这样从控制器中获取数据..

def ajaxPopulateSubTables(int formIDX, int scenarioID, int formID) {
        def db = new Sql(dataSource)

        String mySQL = "Loads of SQL STUFF"
        def subTableResults = db.rows(mySQL)

        render(template: "subTableEntry", model: [subTableResults:subTableResults, formID:formID, formIDX:formIDX])
    }

并在 gsp 上触发它:

    <colgroup>
        <col width="150"/>
        <col width="350"/>
        <col width="350"/>
        <col width="350"/>
    </colgroup>
<g:if test="${subTableResults != null && !subTableResults.isEmpty()}">
    <tr>
        <th>eventIDX</th>
        <th>eventID </th>
        <th>objID</th>
        <th>testVal</th>
    </tr>
</g:if>


<g:each in="${subTableResults}" status = "i" var="item">
    <tr id = ${i} class="${((i) % 2) == 0 ? 'even' : 'odd'}" name="main">
        <td>${item.events_idx}</td>
        <td>${item.type}</td>   
        <td>${item.object_description}</td>
        <td><g:textField id = "testData[${formIDX}:${formID}:${i}]" name="testData[${formIDX}:${formID}:${i}]" value="${item.value}" optionKey="id" /></td>
    </tr>
</g:each>

在此之前将其插入相关的子表中。

问题是,有时当我加载页面时,并非所有子表都已填写,但如果我按 F5 刷新页面,这似乎可以解决问题......虽然并非总是如此,但有时我会得到一个不同的部分不刷新:(

我在控制器中放了一个 println 来查看是否所有的 SQL 都被触发了,但它总是返回所有单独的表单 SQL 字符串......

在萤火虫中查看所有帖子都恢复正常,但页面没有更新......

关于可能导致这种情况的任何建议或想法将不胜感激,我很茫然..

我还尝试更新我的 appendSubTable 函数,其中帖子将包含失败,以防万一发生故障,但这也没有命中,已更新上面的代码以显示这一点

4

1 回答 1

1

奇怪的是,我将 post 函数稍微更改为下面,将表格的发现移动到函数的开头而不是在 post 本身中,这似乎已经成功了,尽管我不确定为什么......是否有人可以解释为什么这是或不是我有兴趣知道为什么!

function appendSubTable(formIDX, scenarioID, $table, formID) {
    var $subTable = $table.find("#" + formIDX).find('td:eq(1)').find("div").find("table")
    var url = "http://localhost:3278/FARTFramework/testScenario/ajaxPopulateSubTables"
    $.post(url, {
        formIDX : formIDX, scenarioID : scenarioID, formID :formID 
    }, function(data) {
        $subTable.append(data)
    }).fail(function() {
        alert("fail")
    });
}
于 2013-08-01T08:28:31.547 回答