2010-11-16 36 views
0

我試圖將選擇選項列表返回給JqGrid添加功能。 我有一個JavaScript/jquery函數,它執行GET來獲取預格式化爲使用JqGrid的字符串。儘管如此,我仍然無法將結果返回給JqGrid。我如何從jQuery Get函數返回數據?具有可變問題的jquery函數

function getDealerPoolSelectOptions() { 
var selectOptions = "1:A;"; 
$.get("DealerManagement/GetAllDealerPoolCodes", function(data) { 
    alert("Data: " + data.toString()); //Displays all the data I'm looking for 
    selectOptions = data; 
}); 
alert("SelectOptions: " + selectOptions); //Just Displays the 1:A 
return selectOptions; 
} 
+0

你有沒有嘗試'selectOptions = data.toString()'? – cambraca 2010-11-16 23:45:50

+0

是的,我嘗試在任何地方添加toString,但它似乎沒有什麼區別。它其實已經是一個字符串。 – MaxGeek 2010-11-16 23:47:53

+1

哦,我看到你的問題,'$ .get'是異步的,所以selectOptions在函數返回後被設置(代碼在服務器返回請求之後運行) – cambraca 2010-11-16 23:48:32

回答

2

$.get開始異步AJAX請求,一旦完成調用回調function(data) ...$.get本身在請求完成之前返回。 alert("SelectOptions ...")零件立即運行(在數據檢索之前),所以selectOptions尚未設置。

0

selectOptions = data;之前調用該警報,因爲ajax函數是異步調用的。如果您希望發生某些事情,例如將數據添加到網格,請在設置selectOptions數據後,在get回調中調用它。

2

jQuery ajax在默認情況下發出一個異步請求(意味着它將在後臺發出請求,而不會阻止其他函數中的執行)。

編輯:雖然你可以提出同步請求,但我應該注意,這是非常不鼓勵的。相反,您應該以利用事件驅動編程的方式設計代碼。

你可以做一個同步的請求是這樣的:

function getDealerPoolSelectOptions() { 
    var selectOptions = "1:A;"; 
    $.ajax({ 
     async: false, 
     url: "DealerManagement/GetAllDealerPoolCodes", 
     success: function(data) { 
      alert("Data: " + data.toString()); //Displays all the data I'm looking for 
      selectOptions = data; 
     } 
    }); 
    alert("SelectOptions: " + selectOptions); 
    return selectOptions; 
} 
+0

-1上出現,用於推薦異步請求。它們是修復這些代碼的快捷方式,但無疑也是錯誤的方式。 – lonesomeday 2010-11-16 23:59:47

+0

@lonesomeday我不會說_undoubtedly_,但在大多數情況下,你會是對的。同步請求在世界 – cambraca 2010-11-17 00:01:34

+0

中佔有一席之地。增加了一個免責聲明。 – mike 2010-11-17 00:04:03

1

也許你應該說明你原來的問題。你想用jqGrid做什麼?

是否要填寫選擇的編輯或搜索字段與來自服務器的數據?您應該使用editoptionsdataUrlsearchoptions。該功能(dataUrl)正是爲每個Ajax加載數據而精確引入的。

如果您可以從服務器提供的數據只能是JSON格式,而不是由jqGrid等待的格式,您還可以使用buildSelect另外重新格式化服務器返回的數據。欲瞭解更多信息,請參閱我的old answer