json navigator.notification.confirm()-多次触发

pbpqsu0x  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(50)

嗨,我有一个循环在JSON重试连接3x之前,引发一个错误,但有时我有3-4个JSON请求,他们都可以通过一个错误,所以我有3个警报在我的phonegap应用程序。
EG.

function showJSONerror(xhr, status)  {

        if (xhr.status === 0 && localStorage["TmpAlertShow"] !== true) {

        navigator.notification.confirm('Connection error.\n Verify your network connection and try again.', confirmAction, 'Woops...','Try Again, Close');
        localStorage["TmpAlertShow"] = true;

        function confirmAction(button) {

          if (button == 1) { localStorage["TmpAlertShow"] = false; showPage(localStorage["TmpWebView"]) }  
          if (button == 2) { localStorage["TmpAlertShow"] = false; return false; } 

        }
}

字符串
我正在尝试找到通过JS关闭先前警报的方法,或者如果警报已经触发但未关闭,则记录状态(防止显示多个警报)
谢谢

ghg1uchk

ghg1uchk1#

您可以尝试设置一个全局变量,该变量是当前运行的请求的计数,然后在错误函数中,如果计数大于0,则将结果存储在全局数组中,如果不是,则处理错误以显示。
范例:

var callsRunning = 0;
var callStatuses = [];

字符串
运行调用时,添加:

callsRunning++;


当呼叫完成时:

callsRunning--;


在错误函数中:

if(callsRunning > 0) {
    callStatuses.push(/*whatever you want to collect*/);
}
else {
    /*compile statuses for display of error*/
}

huus2vyu

huus2vyu2#

我以前遇到过类似的问题
我曾经解决它http://underscorejs.org/#after
也许给予一次机会

osh3o9ms

osh3o9ms3#

我知道这是旧的,但(联合国)令人惊讶的是,Android仍然这样做,有时我作为 cordova 12.x,12/2023。我的解决方案,现在只是设置1秒延迟布尔。我猜可能有一个更圆滑的方式来处理,但这似乎是工作到目前为止。

// boolean to prevent accidental/multiple doConfirm calls (Android quirk?)
var doConfirmJustRan = false;

function doConfirm(confirmText, confirmTitle, confirmCallback){

  try{
    /* doConfirm just ran - don't run again yet! */
    if(doConfirmJustRan == true){
      console.log('doConfirm() tried to run again/too soon [' + confirmText + ']. exiting now.');
      return;
    } 

    /* do main navigator.notification.confirm stuff here ... */

    /* clear var in 1 second (?) */  
    doConfirmJustRan = true;
    window.setTimeout(function(){doConfirmJustRan = false;},1000);
    
  }catch(e){ /* ... */ }
}

字符串

相关问题