我有一個CSHTML頁面,它生成一個網頁,其中包含一個調用JavaScript函數(在同一頁面上)的按鈕,該函數會進行AJAX調用並用結果更新塊。它看起來像這樣:Javascript函數不更新HTML塊 - 應該嗎?
function getItems()
{
$(result_div).html("<b>Processing...</b>");
var resultString = "";
$.ajax({
type: "POST",
url: '@Url.Action("GetItems", "DataHandler.svc")',
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
resultString = "<b>Items:</b><br />";
var itemNames = data;
for (var N in itemNames) {
resultString += (itemNames[N] + "<br />");
}
},
error: function (HelpRequest, ErrorCode, TheError) {
resultString = "Error creating items list:<br />" + TheError;
},
async: false
});
$(result_div).html(resultString);
}
當我按下按鈕時,函數被調用,並最終將正確的數據顯示在「result_div」塊;但是,該功能只有在函數返回時纔會更新,而不是立即按照我的意願顯示「正在處理...」。
但是,如果我有這個:
function getItems()
{
var resultString = "<b>Processing...</b>";
$.ajax({
type: "POST",
url: '@Url.Action("GetItems", "DataHandler.svc")',
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
resultString = "<b>Items:</b><br />";
var itemNames = data;
for (var N in itemNames) {
resultString += (itemNames[N] + "<br />");
}
},
error: function (HelpRequest, ErrorCode, TheError) {
resultString = "Error creating items list:<br />" + TheError;
},
complete: function (Request, Status) {
$(result_div).html(resultString);
}
});
$(result_div).html(resultString);
}
則它立即顯示「正在處理......」在此之前,被替換的數據。
我錯了,假設.html調用會立即更新嗎?是否在刷新頁面之前等待函數完成?
你在變量'result_div'中有什麼值? – Tushar
最初?只是「 」 –
Ajax是異步的,任何在外部聲明的變量都將在內部不確定;)'result_div'必須是一個容器標籤,如div/span等 – Tushar