AJAX 触发远程脚本然后检查 success-response
AJAX trigger remote script then check for success-response
我一直在绞尽脑汁,但我似乎无法全神贯注于我找到的一点帮助。
我正在 运行 连接一个数据库,该数据库由来自另一个数据库的数据提供。 csv 传输由第三方服务器处理,该服务器提供可编译和传送数据的可执行文件 "flows"。
我有一个 php 脚本来处理请求(不能通过 Javascript 直接完成,因为缺少 'Access-Control-Allow-Origin' header)。但这 运行 很好。我可以触发流量。
但这不是问题所在。
我想做的是:用这样的东西触发按钮的@onClick 流:
function trigger_func(flowID) {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID,
dataType: 'json',
success: function(result) {
var jsonResult = jQuery.parseJSON(result);
console.log(jsonResult.runID);
}
});
}
有了 flowID 和生成的 运行ID,我想每隔一秒左右检查一次。
function check_status(flowID, runID) {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID+"&action=status&runId="+runID,
dataType: 'json',
success: function(result){...}
});
}
这将 return 流程的状态/进度。
它会以 status==null 开始几秒钟,然后继续到 status=='running',最后是 status=='success'。
我已经从 check_status() 到 运行 了 15 次,在 trigger_func() 的 success-function 的 for 循环中使用 setTimeout 并且它也工作正常。
但是我终其一生都无法弄清楚如何 link 这些东西一起检查直到状态为 'success' 然后停止检查,更新页面内容等等......
我也摆弄过类似
的东西
trigger_func(id).done(function(result){
console.log(result);
});
这也有效,但在 'success' 之前,我仍然想不出进一步的方法来每秒检查一次。我想这归结为让变量 'status' 回到我的循环中,这样我就可以打破它。
也许有人知道网上某处的一个易于理解的例子...
ajax 是异步的,所以你必须通过一些第三方变量
来管理
喜欢值为 0 的 Init
var _status = 0
而不是在第一次调用时将其更改为 1
function trigger_func(flowID) {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID,
dataType: 'json',
success: function(result) {
var jsonResult = jQuery.parseJSON(result);
console.log(jsonResult.runID);
check_status(flowID, runID);
}
});
}
function check_status(flowID, runID) {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID+"&action=status&runId="+runID,
dataType: 'json',
success: function(result){
//at end status=='success'.
if(status=='success'){
// end part
}else{// running
check_status(flowID, runID);
}
// clear timeout will stop that time interval after success
}
});
}
你可以这样做:
function periodically_check_status_until_success(flowID, runID) {
setTimeout(function() {
$.ajax({
url: './ajaxPHP_handler.php',
data: { flowid: flowID, action: status, runId: runID },
dataType: 'json',
success: function(result){
if (result != 'success') {
periodically_check_status_until_success(flowID, runID);
}
}
});
}, 5000); // Five seconds
}
注意:您可以为 data
选项使用一个对象,而不是自己连接字符串。
所以继续调用它
var flowID, runID;
function trigger_func(flowID) {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID,
dataType: 'json',
success: function(result) {
var jsonResult = jQuery.parseJSON(result);
runID= jsonResult.runID;
check_status();
}
});
}
function check_status() {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID+"&action=status&runId="+runID,
dataType: 'json',
success: function(result){
if (result is not what you want) {
setTimeout(check_status,1000);
}
}
});
}
我一直在绞尽脑汁,但我似乎无法全神贯注于我找到的一点帮助。
我正在 运行 连接一个数据库,该数据库由来自另一个数据库的数据提供。 csv 传输由第三方服务器处理,该服务器提供可编译和传送数据的可执行文件 "flows"。
我有一个 php 脚本来处理请求(不能通过 Javascript 直接完成,因为缺少 'Access-Control-Allow-Origin' header)。但这 运行 很好。我可以触发流量。
但这不是问题所在。 我想做的是:用这样的东西触发按钮的@onClick 流:
function trigger_func(flowID) {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID,
dataType: 'json',
success: function(result) {
var jsonResult = jQuery.parseJSON(result);
console.log(jsonResult.runID);
}
});
}
有了 flowID 和生成的 运行ID,我想每隔一秒左右检查一次。
function check_status(flowID, runID) {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID+"&action=status&runId="+runID,
dataType: 'json',
success: function(result){...}
});
}
这将 return 流程的状态/进度。 它会以 status==null 开始几秒钟,然后继续到 status=='running',最后是 status=='success'。 我已经从 check_status() 到 运行 了 15 次,在 trigger_func() 的 success-function 的 for 循环中使用 setTimeout 并且它也工作正常。 但是我终其一生都无法弄清楚如何 link 这些东西一起检查直到状态为 'success' 然后停止检查,更新页面内容等等......
我也摆弄过类似
的东西trigger_func(id).done(function(result){
console.log(result);
});
这也有效,但在 'success' 之前,我仍然想不出进一步的方法来每秒检查一次。我想这归结为让变量 'status' 回到我的循环中,这样我就可以打破它。
也许有人知道网上某处的一个易于理解的例子...
ajax 是异步的,所以你必须通过一些第三方变量
来管理喜欢值为 0 的 Init
var _status = 0
而不是在第一次调用时将其更改为 1
function trigger_func(flowID) {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID,
dataType: 'json',
success: function(result) {
var jsonResult = jQuery.parseJSON(result);
console.log(jsonResult.runID);
check_status(flowID, runID);
}
});
}
function check_status(flowID, runID) {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID+"&action=status&runId="+runID,
dataType: 'json',
success: function(result){
//at end status=='success'.
if(status=='success'){
// end part
}else{// running
check_status(flowID, runID);
}
// clear timeout will stop that time interval after success
}
});
}
你可以这样做:
function periodically_check_status_until_success(flowID, runID) {
setTimeout(function() {
$.ajax({
url: './ajaxPHP_handler.php',
data: { flowid: flowID, action: status, runId: runID },
dataType: 'json',
success: function(result){
if (result != 'success') {
periodically_check_status_until_success(flowID, runID);
}
}
});
}, 5000); // Five seconds
}
注意:您可以为 data
选项使用一个对象,而不是自己连接字符串。
所以继续调用它
var flowID, runID;
function trigger_func(flowID) {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID,
dataType: 'json',
success: function(result) {
var jsonResult = jQuery.parseJSON(result);
runID= jsonResult.runID;
check_status();
}
});
}
function check_status() {
$.ajax({
url: './ajaxPHP_handler.php',
data: "flowid="+flowID+"&action=status&runId="+runID,
dataType: 'json',
success: function(result){
if (result is not what you want) {
setTimeout(check_status,1000);
}
}
});
}