具有变量问题的jquery函数

时间:2010-11-16 23:44:04

标签: javascript jquery jqgrid

我正在尝试将选择选项列表返回给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;
}

4 个答案:

答案 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做什么?

您是否要使用服务器中的数据填充编辑或搜索字段的选择?您应该使用editoptionssearchoptionsdataUrl。完全引入了功能(dataUrl)以便按照ajax加载数据。

如果您可以从服务器提供的数据只能是JSON而不是jqGrid等待的格式,则可以使用buildSelect来重新格式化从服务器返回的数据。有关详细信息,请参阅我的old answer

答案 3 :(得分:0)

警报在selectOptions = data;之前被调用,因为ajax函数是异步调用的。如果您想要发生某些事情,比如将数据添加到网格中,请在设置selectOptions数据后在get回调中调用它。