如何将ajax呼叫延迟几秒钟

时间:2019-06-18 08:34:02

标签: php ajax facebook facebook-messenger

我不确定这是否是为Facebook api发送2个Ajax Togheter的最佳方法。 但这是可行的,问题是有时我在第二个ajax(result_flow.php)之前获得了第二个ajax(result.flow.php) 将第二个ajax(url:result_flow.php)延迟3秒将很有帮助,或者以某种方式更改此代码以发出命令。

我尝试了setTimeout,但是没有用。

.cpp

3 个答案:

答案 0 :(得分:1)

我建议现在使用async / await,依次使用AJAX调用是很容易的:

$('#sub').click(async () => {
    ...
    try {
        let data = await $.post({
            url: "result.php",
            data: dataString
        });
        if (data === 'success') {
            ...
        }
        data = await $.post({
            url: "result_flow.php",
            data: dataString
        });
        if (data === 'success') {
            ...
        }
    } catch (err) {
        console.log(err);
    }
});

未经测试,因为我不使用jQuery-但这应该可以给您带来启发。由于$.ajax/$.post支持Promises,因此它应与async / await一起使用。请注意,对于较旧的浏览器,您可能需要使用Babel转换代码,但我还是建议您使用Babel。

如果要同时使用两个AJAX调用,请使用Promise.all(因为它们彼此不依赖)-结果将是有序的,因此可以确保回调代码是依次调用。

答案 1 :(得分:0)

首先,setTimeout()不起作用,因为您将其放在了回调中,这意味着它将在请求完成后执行。无论如何,这都不是处理此类任务的适当方法,您应该将第二个请求放入第一个请求的回调中,以便在第一个请求完成时执行该请求。
代码如下:

$('#sub').click(function() {
    var data = $("input#dataInput").val();
    console.log(data);
    var total = $("input#totalInput").val();
    var subscriber_id = $("input#subscriber_id").val();
    var res_name = $("input#res_name").val();
    var dataString = 'data=' + data + '&total=' + total + '&subscriber_id=' + subscriber_id + '&res_name=' + res_name;
    console.log(dataString);
    $.ajax({
        type: "POST",
        url: "result.php",
        data: dataString,
        success: function(data) {
            console.log(data);
            if (data === 'success') {
                //localStorage.clear();
                MessengerExtensions.requestCloseBrowser(function success() {
                    console.log("Webview closing");
                }, function error(err) {
                    console.log(err);
                });

                $.ajax({
                    type: "POST",
                    url: "result_flow.php",
                    data: dataString,
                    success: function(data) {
                        console.log(data);
                    }   
                });
            }      
        }
    });
}

请注意,在我的代码中,因为第一个请求成功放置在if (data === 'success') {...}语句中,所以第二个请求被发送。

答案 2 :(得分:0)

您应该将它们连锁。 成功...然后... 使用诺言是最好的方法。

如果您未明确写明,则永远不要相信您收到的订单。

JQuery Ajax

Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() 
callbacks are removed as of jQuery 3.0. You can use jqXHR.done(), jqXHR.fail(), 
and jqXHR.always() instead.

您可以执行以下操作:

// First Ajax call
$.ajax({
  // Do the request
  // Remove success to use new promise
})
.done(function( data ) {
    // Add the success here
    // Add the Second Ajax call here or create a function to call it, whatever you want
});