2016-03-20 17 views
1

"Mentorslist" varibale aynı işlevde nasıl erişilir. "mentorslist" ajax çağrısının başarısıdır. Ancak mentor() işlevi içinde erişemiyorum.Ajax başarı işlevi özel işlev içinde erişemiyor

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 değişken ajax başarı içine ayarı ve özel görev ekseninde dönmeye çalışıyor Buraya bakın ama bana tanımsız döndürür.

cevap

0

Ajax eşzamansız olduğundan, yalnızca başarı olayı tetiklendiğinde değişken değere sahip olursunuz. Yani başarısına çağırmak için kendi fonksiyonunu tanımlayabilirsiniz:

 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 
     }); 

her zaman bir synchronus bire zaman uyumsuz gelen ajax arama değiştirmek için false ajax çağrısı zaman uyumsuz özelliğini ayarlayabilirsiniz Her durumda:

 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; 
     } 
+0

mentorslist bitmemiş kullanarak undefined – Ni3

+0

çalıştı Bu sevgili ... Sen Rock's .. Çok teşekkür ederim. – Ni3

0

Aynı kapsamda değiller. Bunu yapamazsın.

Yapabilecekleriniz, işlevin dışında bir değişken oluşturmak ve ajax çağrısının başarısına değerini ayarlamaktır. Bundan sonra onunla oynayabilirsiniz.

Ayrıca ajax çağrısı senkronizasyonunu yapın, böylece bittiğinde betiğiniz devam edecektir.

mentorlist; 
function mentors(){ 
    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 
    } 
    }); 
} 

function asd() 
{ 
    console.log(mentorlist); 
} 

mentors(); 
asd(); 
+0

Komut dosyasını paylaşır mısınız? – Ni3

+0

"Mentorlist" değişkenini fonksiyon dışı olarak ayarlıyorum ama hala çalışmıyor. – Ni3

İlgili konular