2013-10-03 190 views
1

我想從ajax成功函數返回值。但它沒有任何回報。從ajax成功函數返回值

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完成;) –

回答

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