javascript - Ajax成功函数无法在自定义函数内访问

标签 javascript php jquery ajax codeigniter

如何在同一函数中访问“mentorslist”变量。 “mentorslist”是ajax调用的成功。但我无法在 Mentors() 函数中访问它。

function mentors(){
    var mentorslist = '';
    $.ajax({
      type: "POST",
      url: <?php echo  '"'.base_url().'index.php/MentorList/'.'"'; ?>,
      data: { pagelimit: 1,json: "true" },
      success: function( msg ) 
      {
          var obj = jQuery.parseJSON(msg);
          var $mentor_list ="";  
          var mlist = '';
          jQuery.each( obj.resset, function( i, val ){
            mlist = mlist+'<option value="'+val.mentor_Id+'">'+val.Name+'</option>';
            $("#mlist").get(0).options[$("#mlist").get(0).options.length] = new Option(val.Name,val.mentor_Id);
          });
         mentorslist = mlist;   //Able to access here
        }
    }); 

    return mentorslist; // gives undefine error
}

看到这里,mentorslist 变量正在设置为 ajax success 并尝试通过自定义函数返回该变量,但它返回给我未定义。

最佳答案

因为 Ajax 是异步的,所以只有当成功事件被触发时,您才拥有变量值。因此,您可以定义自己的函数来调用成功:

        var mentorslist = '';

        function mentors(myCallBack) {
            return $.ajax({
                type: "POST",
                url: "yourPHP",
                data: {pagelimit: 1, json: "true"},
                success: function(msg) {
                    myCallBack(msg);
                }
            });
        }

        mentors(function(msg) {
            var obj = jQuery.parseJSON(msg);
            var $mentor_list = "";
            var mlist = '';
            jQuery.each(obj.resset, function (i, val) {
                mlist = mlist + '<option value="' + val.mentor_Id + '">' + val.Name + '</option>';
                $("#mlist").get(0).options[$("#mlist").get(0).options.length] = new Option(val.Name, val.mentor_Id);
            });
            mentorslist = mlist;   //Able to access here
        });

在任何情况下,您都可以始终将 ajax 调用的 async 属性设置为 false,以便将 ajax 调用从异步更改为同步:

      function mentors(){
            var mentorslist = '';
            $.ajax({
                async: false,
                type: "POST",
                url: <?php echo  '"'.base_url().'index.php/MentorList/'.'"'; ?>,
            data: { pagelimit: 1,json: "true" },
            success: function( msg )
            {
                var obj = jQuery.parseJSON(msg);
                var $mentor_list ="";
                var mlist = '';
                jQuery.each( obj.resset, function( i, val ){
                    mlist = mlist+'<option value="'+val.mentor_Id+'">'+val.Name+'</option>';
                    $("#mlist").get(0).options[$("#mlist").get(0).options.length] = new Option(val.Name,val.mentor_Id);
                });
                mentorslist = mlist;   //Able to access here
            }
        });
        return mentorslist;
      }

关于javascript - Ajax成功函数无法在自定义函数内访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36114908/

相关文章:

javascript - 为什么在创建空数组时 Javascript 在输出中显示 [(...)] 而不是 (...)?

javascript - Redux reducer 的替代品

javascript - 如何获得 jupyterlab 的 javascript 依赖项的最终列表

PhpStorm:满足前提条件时如何处理未处理的异常

javascript - 默认情况下模态覆盖不关闭,使用 jquery 显式处理时会出现错误

javascript - 将光标放在弹出窗口中显示的世界地图的任何区域上时,如何显示区域名称和 Gdp 值?

php - 使用什么来代替 EtherPad?使用 php 和 mySql

javascript - 如何在 XMLHttpRequest 中添加 PHP 回显的元素?

javascript - 调整窗口大小时使用 jQuery 更改主体

c# - 如何使用动态创建的 jquery 获取文本框的值?