2013-10-03 3 views
1

Я пытаюсь вернуть значение из функции успеха ajax. но ничего не возвращает.return value from ajax success function

JS

function calculate_total_percentage(course_log_id){ 
    var total_percentage = 0; 
    $.ajax({ 
     url:"teacher_internal_exam_management/get_exams_of_course_log/"+course_log_id, 
     type: "POST", 
     dataType: "json", 
     success: function (exams_of_course_log) { 
      for (var x = 0; x < exams_of_course_log.length; x++) { 
       total_percentage += parseInt(exams_of_course_log[x].marks_percentage); 
      } 
      alert(total_percentage); 
      return total_percentage; 
     } 
    }); 
} 

если я называть как то

alert(calculate_total_percentage(course_log_id)); 

затем показывает '61' (из-за вызвать тревоги (total_percentage);), но затем показывает 'неопределенные' почему? Он должен показывать «61» дважды? В чем проблема?

+0

Если бы у меня было 1 фунт стерлингов за каждый раз, когда этот вопрос задавал тот, кто не искал ... –

+0

@RoryMcCrossan у вас есть, и у меня будет 1 фунт за каждый вопрос делегации. По рукам? – Archer

+0

@Archer done;) –

ответ

4

Функция не просто ждать, пока вызов Ajax не будет завершена до выхода, так что вам нужен способ, чтобы обработать возвращаемое значение, когда он приедет ...

function calculate_total_percentage(course_log_id, callback){ 
    $.ajax({ 
     url:"teacher_internal_exam_management/get_exams_of_course_log/"+course_log_id, 
     type: "POST", 
     dataType: "json", 
     success: function (exams_of_course_log) { 
      var total_percentage = 0; 
      for (var x = 0; x < exams_of_course_log.length; x++) { 
       total_percentage += parseInt(exams_of_course_log[x].marks_percentage); 
      } 
      callback(total_percentage); 
     } 
    }); 
} 

Теперь вы можете передать ссылку на функцию обратного вызова, которая должна быть выполнена после успешного вызова Ajax ...

function calculate_total_percentage_success(total_percentage) { 
    alert(total_percentage); 
} 

Теперь вы можете назвать оригинальную функцию, как это ...

calculate_total_percentage(id, calculate_total_percentage_success); 
+0

спасибо, что я только что получил контроль над ним. – user2557992

+0

Рад помочь :) – Archer