【问题标题】:jquery function with variable problem带有变量问题的jquery函数
【发布时间】:2011-05-11 03:42:31
【问题描述】:

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

【问题讨论】:

  • 你试过selectOptions = data.toString()吗?
  • 是的,我几乎在任何地方都尝试添加 toString,但似乎没有什么不同。它实际上已经是一个字符串。
  • 哦,我明白你的问题了,$.get 是异步的,所以 selectOptions 在函数返回后被设置(里面的代码在请求从服务器返回后运行)
  • 您是否尝试将alert("SelectOptions: " + selectOptions); inside of function(data) {...}
  • 这个问题每天至少出现一次 SO... head =>desk

标签: javascript jquery jqgrid


【解决方案1】:

默认情况下,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;
}

【讨论】:

  • -1 用于推荐异步请求。它们是修复此代码的快速方法,但无疑也是错误的方法。
  • @lonesomeday 我不会说毫无疑问,但在大多数情况下你是对的。同步请求在世界上占有一席之地
  • 很公平。添加了免责声明。
【解决方案2】:

也许你应该描述你原来的问题。你想用 jqGrid 做什么?

您想用来自服务器的数据填充编辑或搜索字段的选择吗?您应该使用editoptionssearchoptions 中的dataUrl。该功能 (dataUrl) 专门用于加载每个 ajax 的数据。

如果您可以从服务器提供的数据只能是 JSON 而不是 jqGrid 等待的格式,您可以另外使用buildSelect 重新格式化从服务器返回的数据。更多信息请看我的old answer

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      $.get 开始一个异步 AJAX 请求,并在完成后调用您的回调 function(data) ...$.get 本身在请求完成之前返回。 alert("SelectOptions ...") 部分会立即运行(在检索数据之前),因此尚未设置 selectOptions

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多