Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Javascript检查两个互斥条件的最佳方法?_Javascript_Ajax_Setinterval_States - Fatal编程技术网

用Javascript检查两个互斥条件的最佳方法?

用Javascript检查两个互斥条件的最佳方法?,javascript,ajax,setinterval,states,Javascript,Ajax,Setinterval,States,嗨,我有以下代码,用于检查Rails模型状态 var intervalCall = setInterval(function(){ $.post("getstatus", {id:id}); var finished = "<%= @sentence.finished%>"; //THIS IS CONDITION ONE, IT IS LIKELY TO HAPPEN LATER AND I WANT TO STOP THE SETINTERVAL if ("

嗨,我有以下代码,用于检查Rails模型状态

var intervalCall = setInterval(function(){
  $.post("getstatus", {id:id});
  var finished = "<%= @sentence.finished%>";
     //THIS IS CONDITION ONE, IT IS LIKELY TO HAPPEN LATER AND I WANT TO STOP THE SETINTERVAL
  if ("<%= @sentence.result %>"){
        clearInterval(intervalCall);
        state_2();
  }
     //THIS IS CONDITION TWO, IT IS LIKELY TO HAPPEN EARLIER AND I WANT 
    // TO KEEP THE SETINTERVAL RUNNING AFTER IT"S MET
   else if (String(finished)== "true"){
        state_1();
    }
},3000);


intervalCall;
var intervalCall=setInterval(函数(){
$.post(“getstatus”,{id:id});
var finished=“”;
//这是一种情况,以后可能会发生,我想停止设置间隔
如果(“”){
clearInterval(intervalCall);
状态_2();
}
//这是第二种情况,可能会更早发生,我希望
//在满足设置间隔后保持其运行
else if(字符串(完成)=“true”){
状态_1();
}
},3000);
通话间隔;
组织这种流动的最佳方式是什么

提前谢谢

// setInterval/ setTimeout return the timer id
var intervalCall;
function updateStatus (){
    // post need a callback to process the data response by server
    $.post("getstatus", {id:id}, function  ( data ) {
        data = $.parseJSON ( data ) // asume you use jQuery and the data is a json string
        if ( data.result ){
            state_2(); // if you want the result as a arg, do state_2( data.result )
            return;
        } else {
            // no need to use finished flag, when there is a response and no result, call again
            // anything when no success resulte you want to do could write here

            state_1();
            intervalCall = setTimeout ( updateStatus, 3000 );
        }
    });
},3000);
intervalCall = setTimeout ( updateStatus, 3000 );
一些更新


一些更新
String(finished)=“true”
o我建议将其改进为
String(finished).length==4
改变了它,但并没有完全解决问题。@zerkms是在挖苦人,我猜…如果
@station.finished
将是
true
false
,你应该使用
var finished=;
(没有引号)和
如果(finished)
如果(finished==true)
字符串(finished)=“true”o我建议将其改进为
String(finished)。length==4
更改了它,但并没有完全解决问题。@zerkms是在讽刺……如果
@句子。finished
将是
true
false,您应该使用
var finished=;
(无引号),和
if(finished)
if(finished==true)
。太好了,谢谢!一个问题是我确实需要调用state_1b/c,$.post(“getstatus”,{id:id})正在触发另一个操作(由Rails控制器触发)-我需要保持该操作被触发,除非我满足状态_1条件..希望解释足够清楚..请让我知道其他情况。还有这行:data=$.parseJSON(data)//a如果您使用jQuery,并且数据是json字符串,则会给出“意外的令牌v”错误。它实际上与此解决方案一起工作(我仍然需要单独做一个$.get('/SENTURE/'+id+'.json,函数(data){if(data.result){..}});谢谢!太好了,谢谢!一个问题是我确实需要调用state_1 b/c,$.post(“getstatus”,{id:id})正在触发另一个动作(由Rails控制器触发)-我需要保持该操作被触发,除非我满足状态_1条件..希望解释足够清楚..请让我知道其他情况。还有这行:data=$.parseJSON(data)//a如果您使用jQuery,并且数据是json字符串,则会给出“意外的令牌v”错误。它实际上与此解决方案一起工作(我仍然需要单独制作一个$.get('/SENTURE/'+id+'.json,函数(data){if(data.result){..});谢谢!