如何在获取其值之前检查数据是否已加载到元素中

时间:2017-08-25 09:03:20

标签: javascript jquery ajax

我有一个select输入,使用ajax-php-ajax到元素的数据库中填充一个值,在结果加载后,它现在在select上有一个值,

之前

  <select type="text" id="sys_type" name="" class="form_input" required/>
  </select>

  <select type="text" id="sys_type" name="" class="form_input" required/>
  <option value="2">Super Admin</option>
  <option value="3">Admin</option>                                                                          
  <option value="4">Encoder</option>                                                                         
  <option value="5">Office Staff</option>                                                                          
  <option value="6">Guest</option>-->                                                                           
  </select>

这是代码函数的一部分

<script type="text/javascript" language="javascript">
$(document).ready(function()
{

      objFunction["select_usertype"]($("#sys_type"), Base64.encode("select_usertype"));

      //objFunction[js_obj_function](selector, php_action )
      //objFunction is an object that holds some functions
      //var objFunction= { js_obj_function : function(){ //...ajax here//}  }

     //now the problem
     //============================================================
     var usertype= $("#sys_type").val(); //if i'm using this it returns null 
     //maybe this is executed when the above function is not done yet.

});
</script>

我无法获得该值,我试图将其用作解决方案但不起作用

function looper()
    {
        if($("#sys_type").val() !=="" )//if($("#sys_type option:selected").val() !=="" )
        {
            console.log($("#sys_type").val()); //returned null
            clearInterval(int);
        }
   }

   var int = setInterval(looper(), 10);

感谢您提前提供任何帮助,

 ///-------------------->Request Response
 var objFunction= 
 {
    select_usertype: function select_usertype(element, action,middlewaretoken)
  {
  if(middlewaretoken!=="")
    {
        $.ajax({
                type: "POST",
                url:  "private/process/request.php",
                dataType: "json",
                data:{action: action, middlewaretoken:Base64.encode(middlewaretoken)},
                success:function(data)
                {
                    if(data.error!==true)
                    {
                        if(element.length > 1)
                        {
                            for(var x=0; x < element.length; x++)
                            {
                              element[x].empty();
                              for(var i=0; i < data.length; i++)
                                {
                                element[x].append('<option value="'+data[i].sys_id+'">'+data[i].sys_usertype+'</option>');
                                }
                            }
                        }
                        else
                        {

                              element.empty();
                              for(var i=0; i < data.length; i++)
                                {
                                element.append('<option value="'+data[i].sys_id+'">'+data[i].sys_usertype+'</option>');
                                }
                        }

                    }
                    else
                    {
                        if(element.length > 1)
                        {
                            for(var i=0; i < element.length; i++)
                            {
                            element[i].empty().append('<option value="">Select...</option>'); 
                            }
                        }
                        else
                        {
                        element.empty().append('<option value="">Select...</option>');
                        }
                    }
                }
                });
    }
    }//, other objects.....

};

1 个答案:

答案 0 :(得分:1)

如果你使用的是jQuery.ajax(),你可以写这样的东西

jQuery.ajax(...).done(function() {
    var usertype= $("#sys_type").val();
}).fail(function() {
    //some error handling
});

编辑

您可以像这样修改select_usertype功能

function(...) {
    if(...) {
         return jQuery.ajax(...);
    }
}

移动你的成功功能

var oAjaxRequest  = objFunction["select_usertype"]($("#sys_type"), Base64.encode("select_usertype"));
if (oAjaxRequest) {
     oAjaxRequest.done(function(oData) {
         //all other staff
         ....
         var usertype= $("#sys_type").val();
     }.bind(objFunction["select_usertype"]));
}

或者您可以将一些回调传递给select_usertype函数并在成功函数中调用它。例如:

function(element, action, middlewaretoken, successCallback) {
    if(...) {
         jQuery.ajax(
             ...,
             success: function(oData) {
                 ...
                 successCallback.call();
             }
         );
    }
}

并在document.ready传递

function process() {
    var usertype= $("#sys_type").val();
}

objFunction["select_usertype"]($("#sys_type"), Base64.encode("select_usertype"), null, process.bind(this));