我不确定这是否是为Facebook api发送2个Ajax Togheter的最佳方法。 但这是可行的,问题是有时我在第二个ajax(result_flow.php)之前获得了第二个ajax(result.flow.php) 将第二个ajax(url:result_flow.php)延迟3秒将很有帮助,或者以某种方式更改此代码以发出命令。
我尝试了setTimeout,但是没有用。
.cpp
答案 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)
您应该将它们连锁。 成功...然后... 使用诺言是最好的方法。
如果您未明确写明,则永远不要相信您收到的订单。
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
});