2013-10-03 3 views
2

Я пытаюсь отправить POST скрипту PHP без использования формы. Функция работает правильно, кроме собственно почтовой части.jQuery Отправить POST без формы

Может ли кто-нибудь увидеть, что должно быть неправильно с тем, что я здесь делаю?

function checkforRates(){ 
alert('activated'); 
//FUNCTION CHECKS FOR RATES FOR EACH OF THE ICPS IN LATEST CONTRACT 
var count = $("#selectICP").children("option:not([disabled])").length; 
success = 0 
$('#selectICP option:not([disabled])').each(function() { 
    opICPs = $(this).val(); 
    $.ajaxSetup({ 
     type: 'POST', 
     URL: 'functions/workforce_newcontract.php', 
     data: {'checkrates': 'true', 'ICP': opICPs, 'ctype': ctype}, 
     //data: '?checkrates=true&ICP=' + opICPs + '&ctype=' + ctype, 
     success: function(result) { 
      if(result == 1){  
       //THIS ICP HAS ALL METERS AND ENGINES WITH RATES 
       success = success + 1; 
      } else {  
       $('#contract_window_message_error_mes').html(result); 
       $('#contract_window_message_error').fadeIn(300).delay(3000).fadeOut(700); 
       return false; 
      } 
     }, 
     error: function() { 
      $('#contract_window_message_error_mes').html("An error occured, the form was not submitted."); 
      $('#contract_window_message_error').fadeIn(300).delay(3000).fadeOut(700); 
     } 
    }); 
    if(success === count){ 
     //CONTINUE ONTO NEXT STAGE 
     alert('Success!'); 
    } 
}); 
} 

Большое спасибо.

+0

Что не работает, есть ли ошибки в консоли? – tymeJV

+0

Похоже, вы попадаете в ловушку асинхронного javascript. Я считаю, что весь ваш код работает, но ваш оператор if работает до завершения ajax. Вы должны поместить несколько console.log в свой метод успеха ajax. Если вы можете сказать, что ajax работает не так, как ожидалось, укажите, что будет выводить вывод debug console.log. – TheThirdOne

+1

$ .ajaxSetup НЕ будет делать вызов AJAX, он просто подготовится к будущему звонку AJAX. Попробуйте изменить его на $ .ajax() и снова запустите. Кроме того, AJAX является асинхронным. Я не думаю, что он может закончить раньше, чем «if (success === count)» сразу после разговора. –

ответ

1

Во-первых, вы вызываете неправильную функцию. Вам необходимо позвонить по номеру $.ajax(), а не $.ajaxSetup().

Во-вторых, вы не предоставляете правильные аргументы. В частности:

URL: 'functions/workforce_newcontract.php', 

Правильное имя свойства url, не URL:

url: 'functions/workforce_newcontract.php', 

В-третьих, как и Кен Ченг отметил, что вы не обрабатывает асинхронную часть правильно. Этот бит кода:

if(success === count){ 
    //CONTINUE ONTO NEXT STAGE 
    alert('Success!'); 
} 

должен быть внутри ваша success() функция, а не после $.ajax() вызова.

+0

спасибо @Michael Geary, капиталы сделали трюк. И спасибо всем, кто указал на проблему if (success === count) :) –

Смежные вопросы