jquery - 首先获取请求为同步,然后是异步

时间:2016-01-29 17:03:02

标签: jquery html json ajax asynchronous

我有一个用例,我希望我的第一个get服务请求应该立即发生(同步方式)。 基于这个用途,我将展示一些信息。然后我需要异步轮询相同的请求(ajax)。 我有针对asynchronousm部分的解决方案。但是第一个操作,我怎么能在jquery中实现这一点。 两者都是相同的要求。建议是否有其他方法来实现这一点。

(function poll() {
            setTimeout(function() {
                $.ajax({
                    url: "server script path",
                    type: "GET",
                    success: function(data) {
                        console.log("polling"+data);
                        if(data.is_running === false){
                            console.log("stop polling");
                            $("#overlay").show();
                        }
                    },
                    dataType: "json",
                    complete: poll,
                    timeout: 2000
                })
            }, 50000);
        })();

谢谢,

2 个答案:

答案 0 :(得分:1)

INSERT INTO  `database`.`databasetable` (
`iUserId` ,
`eUserType` ,
`eBalType` ,
`fCreditAmount` ,
`fDebitAmount` ,
`dEntryDate` ,
`dValueDate` ,
`vDescritption` ,
`vBalTypeCode` ,
`iRefId` ,
`vRefTypeCode` ,
`iAddedUserId` ,
`eAddedUserType` ,
`vProcessDescription` ,
`eBalanceStatus`
)
(
    SELECT id as iUserId,
    'C' as eUserType,
    'C' as eBalType,
    '5.00' as fCreditAmount,  
    '0.00' as fDebitAmount,  
    '2016-02-04 21:11:54' as dEntryDate,  
    '2016-02-04' as dValueDate,  
    'manual deposit' as vDescritption,  
    'D' as vBalTypeCode,  
    '0' as iRefId,  
    'CR' as vRefTypeCode,  
    '0' as iAddedUserId,  
    'S' as  eAddedUserType, 
    'manual deposit' as vProcessDescription,  
    'A' as eBalanceStatus
    FROM user
)

答案 1 :(得分:0)

您需要做的就是在第一次请求中将async属性设置为false

$.ajax({
    url: "your url here",
    type: "GET",
    success: onSuccess,
    dataType: "json",
    async: false,
    complete: poll //this will start your polling
    //Everything else
});

您可以阅读有关$.ajax及其属性的文档here。将async设置为false将使其成为同步请求。

此外,如果您想轮询服务器,您应该使用setInterval代替setTimeout,如评论中提到的Eric Guan。

编辑:第二个想法,我看到你在ajax请求完成时调用poll。这可能比setInterval更好,具体取决于您的使用案例。