我正在尝试将选择选项列表返回给JqGrid添加功能。 我有一个javascript / jquery函数,它执行GET以获取预格式化的字符串以使用JqGrid。我在将结果返回到JqGrid时遇到了麻烦。如何从jQuery Get函数返回数据?
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 :(得分:2)
$.get
开始异步AJAX请求,并在完成后调用您的回调function(data) ...
。 $.get
本身在请求完成之前返回。 alert("SelectOptions ...")
部分立即运行(在检索数据之前),因此尚未设置selectOptions
。
答案 1 :(得分: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;
}
答案 2 :(得分:1)
可能你应该描述你原来的问题。你想用jqGrid做什么?
您是否要使用服务器中的数据填充编辑或搜索字段的选择?您应该使用editoptions或searchoptions的dataUrl
。完全引入了功能(dataUrl
)以便按照ajax加载数据。
如果您可以从服务器提供的数据只能是JSON而不是jqGrid等待的格式,则可以使用buildSelect
来重新格式化从服务器返回的数据。有关详细信息,请参阅我的old answer。
答案 3 :(得分:0)
警报在selectOptions = data;
之前被调用,因为ajax函数是异步调用的。如果您想要发生某些事情,比如将数据添加到网格中,请在设置selectOptions数据后在get回调中调用它。