2013-06-06 128 views
0

有人可以幫助下面的代碼?這似乎是不正確的。jquery post返回回調

如何從回調中返回布爾值,並檢查是否可以繼續。

在我看來,布爾值總是爲true,而false從不返回。

也請描述代碼在您更正後如何工作。謝謝。

$("#divContent").on('blur', "input[id^='cak4premium0']", function() { 
    var selectedPayoutFreq = $('input[name=SelectedPayoutFrequency]:checked').val(); 

    if (typeof selectedPayoutFreq === "undefined") { 
     alert("Please select Payout Frequency"); 
     return; 
    } 

    var selectedValue = $(this).val(); 

    if (selectedValue = '') { 
     alert("Please enter Premium"); 
     return; 
    } 

    var premiumValid = checkPremiumAmount(); 

    if (premiumValid) { 
     var url = "/Annuity/Home/CalculateAnnuityPayout"; 
     var data = GetAnnuityMainPlan(); 
     data.SelectedPayoutFrequency = selectedPayoutFreq; 
     $.post(url, data, DisplayCountAnnuity); 
    } 

}); 

function checkPremiumAmount() { 
    var url = "/Annuity/Home/GetAnnuityMinMaxPremium"; 
    var data = GetAnnuityMainPlan(); 
    var currentPlan = $('.selectPlan').val(); 
    var retValue = true; 
    $.post(url, data, null).done(function (data) { 
     minPremium = data.MinPremium; 
     maxPremium = data.MaxPremium; 
     var premium = data.Premium; 
     if (premium < minPremium) { 
      if (currentPlan == 'CAK4') { 
       alert("The minimum Premium is $" + minPremium); 
       $("input[id^='cak4premium0']").val(minPremium); 
       retValue = false; 
      } 
      else if (currentPlan == 'GAK4') { 
       alert("For single premium less than " + minPremium + ", annuity installment will be paid yearly."); 
       $("input[id^='cak4premium0']").val(minPremium); 
       retValue = false; 
      } 
     } 


     if (premium > maxPremium) { 
      alert("The maximum Premium is " + maxPremium); 
      $("input[id^='cak4premium0']").val(maxPremium); 
      retValue = false; 
     } 

     return retValue; 
    }); 

} 
+0

你不能返回到父函數的回調。 –

回答

1

jquery - return value from callback function (in post request) into the function its inside of?

除非你做一個同步的AJAX調用(你可能不希望這樣做),你根本無法。

如果這個函數在你的代碼的幾個地方使用,你最好的辦法可能是讓它接收一個函數。

通過這種方式,您不需要依賴從某個代碼中使用的函數返回的結果,而是直接將代碼直接傳入,因此確保能夠使用該響應。

var my_form = $('#my_form'); 

my_form.submit(valid_pass_sett); 

function valid_pass_sett() { 
    //code to remove errors left over from previous submissions - snipped 
    pass_old = $('input[name=pass_old]').val(); 
    pass_new = $('input[name=pass_new]').val(); 
    pass_confirm_new = $('input[name=pass_confirm_new]').val(); 

    validate('password', pass_new, pswd_validation_callback); // async validation 

    return false; // cancel form submission 
} 

function validate(request_type, request_text, callback) { 
    $.post("http://www.example.com/ajax/validate.php",{ 
     type: request_type, 
     text: request_text 
    }, callback); 
} 

function pswd_validation_callback(data) { 
    if (data === 'valid') { 
     // if valid, call the native .submit() instead of the jQuery one 
     my_form[ 0 ].submit(); 
    } else { 
     // Otherwise do your thing for invalid passwords. 
     // The form has already been canceled, so no concerns there. 
     $('#pass_new').addClass('error'); 
     $('#pass_confirm_new').addClass('error'); 
     $(error_string.format('Please enter a valid password.')).insertAfter('#pass_confirm_new'); 
     $('#pass_text_short').hide(); 
     $('#pass_text_long').show(); 
    } 
}