2013-07-30 43 views
0

所以我有一個「場景」,由大量的「形式」,其中包含大量的「事件」和「數據」等。爲了填充所有這些信息,我在頁面中運行一次頁面完成Ajax POSTS不更新屏幕內容

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

這然後調用下面的函數(第一調用第二,這樣做,因爲我已經在那裏,因爲它是阿賈克斯循環變量事情是之前被更新的問題附加,所以一切都結束在最後一個子表): -

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字符串...

展望螢火所有的帖子都恢復正常,但頁面只是沒有更新...

任何關於什麼mi的建議或想法ght是造成這將不勝感激,我不知所措,我很茫然。

我也嘗試更新我的appendSubTable函數,其中的職位是包括一個失敗的情況下,失敗的情況下,但這也沒有命中,有上述更新的代碼,以顯示該

+0

使用像Firebug這樣的工具來查看發生的ajax調用。他們都回到瀏覽器? –

+0

@SérgioMichels我有螢火蟲,如何查看ajax調用是否正在發生並返回瀏覽器? – MorkPork

+0

解決了如何讓它顯示。通過它的外觀,所有的POST都返回數據,但頁面似乎並沒有顯示所有的東西,我可以看到,當我查看螢火蟲內的html時,空表中沒有任何內容,但是看着帖子我可以看到它回來的數據:S – MorkPork

回答

1

奇怪的是我改變後的功能略向下方,該表的發現移動到函數的開始,而不是職位本身並似乎已經完成了帽子戲法,雖然爲什麼我不確定...是否有人可以解釋爲什麼這是或否,我有興趣知道爲什麼!

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") 
    }); 
}