Javascript 如何在全局变量中获取动态选择列表的值?

Javascript 如何在全局变量中获取动态选择列表的值?,javascript,jquery,ajax,getjson,selectlist,Javascript,Jquery,Ajax,Getjson,Selectlist,我试图在全局变量中获取动态填充的选择列表的值。以下是我获取并填写选择列表的方式: My dropdown.js脚本: $(document).ready(function () { $("#slctTable").change(function() { $.getJSON("dropdown_code/get_fields.php?table=" + $(this).val(), success = function(da

我试图在全局变量中获取动态填充的选择列表的值。以下是我获取并填写选择列表的方式:

My dropdown.js脚本:

$(document).ready(function () {

    $("#slctTable").change(function()
    {
        $.getJSON("dropdown_code/get_fields.php?table=" + $(this).val(), success = function(data)
        {
            var options = "";
        for(var i = 0; i < data.length; i++)
            {
                options += "<option value='" + data[i] + "'>" + data[i] + "</option>";
            }
        $("#slctField").html("");
        $("#slctField").append(options);
        $("#slctField").change();
    });    
    });
});
但当我运行脚本时,我得到的结果是:

但是当我在firebug中复制粘贴代码并运行它时。我得到了我想要的结果。所以当我尝试获取值时,我认为选择列表还没有填满。但是我在这个问题上坚持了很长一段时间,现在我不知道该怎么办。

因为是异步的,要解决您的问题,您可以在选择完成时(在getJSON成功结束时)触发

在我的示例中,我使用了这个SLCTFIELD填充的新事件

这是一种不同的方法。另一种可能的解决方案可以基于回调:在异步函数的末尾执行回调函数,就像getJSON一样

我的片段:

$(函数(){
$.getJSON('https://api.github.com/users,success=函数(数据){
var选项=“”;
对于(变量i=0;i

因为是异步的,为了解决您的问题,您可以在选择完成时(在getJSON成功结束时)触发

在我的示例中,我使用了这个SLCTFIELD填充的新事件

这是一种不同的方法。另一种可能的解决方案可以基于回调:在异步函数的末尾执行回调函数,就像getJSON一样

我的片段:

$(函数(){
$.getJSON('https://api.github.com/users,success=函数(数据){
var选项=“”;
对于(变量i=0;i


你说得很对!GET是异步的,可能会在main.js代码完成执行后很长时间内完成。您需要确保您对全局变量的修改以某种方式与回调绑定在一起,以便保证它在以后运行

var options = [];
$("#slctField").change(function()
{
    $.getJSON("dropdown_code/get_attributes.php?table=" + $(slctTable).val() ,"field=" + $(slctField).val() , success = function(data)
    {
        ...
        //Option 1: Append the values inside your callback. 
        //Use window.options because you have another local variable options(window.XX calls any global XX)
        for(var i = 0; i < data.length; i++)
        {
            ...
            window.options.push(data[i]);
        }
        //Option 2: Basically the same thing as 1, call a function that does the same thing at the end of your callback
        populateOptions();
    });    
});
function populateOptions(){
    $('#slctField > option').each(function(){
        options.push(this.value);
    });
} 
var选项=[];
$(“#slctField”).change(函数()
{
$.getJSON(“dropdown_code/get_attributes.php?table=“+$(slctTable).val(),”field=“+$(slctField).val(),success=函数(数据)
{
...
//选项1:在回调中追加值。
//使用window.options,因为您有另一个局部变量选项(window.XX调用任何全局变量)
对于(变量i=0;ioption')。每个(函数(){
options.push(这个.value);
});
} 

有很多其他方法可以做到这一点,只要你保证它在你的GET之后执行。如果你有任何问题,发表评论。小心选项的范围,因为你有多个变量命名选项(或者考虑不同的名字,这样你以后就不会混淆了)。GET是异步的,可能会在main.js代码完成执行后很长时间内完成。你会想让苏
var options = [];
$("#slctField").change(function()
{
    $.getJSON("dropdown_code/get_attributes.php?table=" + $(slctTable).val() ,"field=" + $(slctField).val() , success = function(data)
    {
        ...
        //Option 1: Append the values inside your callback. 
        //Use window.options because you have another local variable options(window.XX calls any global XX)
        for(var i = 0; i < data.length; i++)
        {
            ...
            window.options.push(data[i]);
        }
        //Option 2: Basically the same thing as 1, call a function that does the same thing at the end of your callback
        populateOptions();
    });    
});
function populateOptions(){
    $('#slctField > option').each(function(){
        options.push(this.value);
    });
}