2012-06-21 242 views
1

我認爲這將是一些明顯的問題,但我無法弄清楚。我希望有一個人可以幫助我。jQuery ajax返回

所以我有3張幻燈片滑塊 - 簡介,提問,提交

現在我要確保,如果問題是回答錯誤的人不能滑動提交。

移動滑塊功能是這樣的:

function changeSlide(slide){ 

     // In case current slide is question check the answer 
     if (jQuery('.modalSteps li.current',base).hasClass('questionStep')){ 
      checkAnswer(jQuery('input[name="question_id"]',base).val(), jQuery('input[name="answer"]:checked',base).val()); 
     } 

     jQuery('.modalSteps li.current',base).fadeOut('fast',function(){ 
      jQuery(this).removeClass('current'); 
      jQuery(slide).fadeIn('fast',function(){ 
       jQuery(slide).addClass('current'); 
      }); 
     }); 

     // In case the new slide is question, load the question 
     if (jQuery(slide).hasClass('questionStep')){ 
      var country = jQuery('input[name="country"]:checked',base).val(); 
      loadQuestion(country); 
     } 
    } 

現在,你可以在第一線看到,我調用函數checkAnswer,這需要問一答的ID的ID,並把它傳遞給AJAX呼叫。

function checkAnswer(question, answer){ 
     jQuery.ajax({ 
      url: window.base_url+'ajax/check_answer/'+question+'/'+answer+'/', 
      success: function(data){ 
       if (!data.success){ 
        jQuery('.question',base).html(data.message); 
       } 
      } 
     }); 
    } 

我遇到的問題是,我不能說

if(checkAnswer(...)){} 

因爲阿賈克斯的它總是返回false或未定義。我需要的是這樣的:

function changeSlide(slide){ 

     // In case current slide is question check the answer 
     if (jQuery('.modalSteps li.current',base).hasClass('questionStep')){ 
      if (!checkAnswer(jQuery('input[name="question_id"]',base).val(), jQuery('input[name="answer"]:checked',base).val())){ 
       return false; 
      } 
     } 
... 

因此,它會阻止幻燈片繼續前進。

現在,當我想到它時,我可能會有像「錯誤答案」那樣的幻燈片,所以我可以將幻燈片放在那裏,但我希望看到第一個解決方案。

謝謝你的提示

+0

您是否試過讓您的ajax調用同步?因爲你應該。並且在你的檢查答案中,你應該有一些在成功函數 – vol7ron

回答

1

可以異步AJAX假的設置選項,以等待來自服務器的應答。因此,代碼可能如下所示。

function checkAnswer(question, answer){ 
    result = false; 
    jQuery.ajax({ 
     async: false, 
     url: window.base_url+'ajax/check_answer/'+question+'/'+answer+'/', 
     success: function(data){ 
      result = data.success 
      if (!data.success){ 
       jQuery('.question',base).html(data.message); 
      } 
     } 
    }); 

    return result; 
} 
+0

中設置的返回變量。你可以看到這正是我所說的。我不知道你可以關閉異步...謝謝你!去嘗試一下 – Tom