使用jQuery提交POST请求而不需要表单

4

我想提交一个POST请求到一个PHP脚本中,但是不想使用表单。除了HTTP 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!');
    }
});
}

非常感谢。
许多感谢。

有什么问题出现了吗?控制台是否显示任何错误信息? - tymeJV
看起来你陷入了异步JavaScript的陷阱。我相信你的所有代码都在工作,但是你的if语句在ajax完成之前运行。你应该在ajax成功方法中放置一些console.log。如果你能确定ajax不按预期工作,请包括debug console.log的输出意义。 - TheThirdOne
1
$.ajaxSetup不会执行AJAX调用,它只是为将来的AJAX调用做准备。尝试将其更改为$.ajax()并再次运行。此外,AJAX是异步的。我认为它不可能在调用后立即完成"if(success === count)"。 - Ken Cheung
1个回答

1
首先,您调用了错误的函数。您需要调用$.ajax()而不是$.ajaxSetup()
其次,您没有提供正确的参数。具体来说:
    URL: 'functions/workforce_newcontract.php',

正确的属性名称是url,而不是URL
    url: 'functions/workforce_newcontract.php',

第三点,正如Ken Cheung所指出的那样,您没有正确处理异步部分。以下是代码片段:
if(success === count){
    //CONTINUE ONTO NEXT STAGE
    alert('Success!');
}

需要在success()函数内部而不是在$.ajax()调用之后。

感谢 @Michael Geary,大写字母解决了问题。还要感谢其他人指出了 if(success === count) 的问题 :) - Seán McCabe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接