我有一个不断发送请求的功能,但是时间间隔需要根据我的函数返回而改变。 调用脚本,我在JSON变量cas间隔中以秒为单位返回,并且需要更改此函数的间隔变量。有人可以告诉我怎么做吗?如果事情没有返回任何东西,那么再次发送popžadavek。
非常感谢
function dotaz(){
//var cas
$.ajax({
type: "GET",
url: "loader.php",
data: "promenna=1&promt=3&p="+Math.random(),
dataType: "json",
success: function(jdata){
$("#loader").html(jdata.promenna);
if(jdata.chyba == 0){
$("#loader").css({'background-color' : '#B90000'});
}
if(jdata.chyba == 1){
$("#loader").css({'background-color' : 'green'});
}
var cas = jdata.cas*1000;
},
error: function (xhr, ajaxOptions, thrownError){
if(xhr.status == 404) {
$("#loader").html("Soubor nenalezen");
}
if(xhr.status == 400) {
$("#loader").html("Špatný požadavek");
}
if(xhr.status == 403) {
$("#loader").html("Přístup zamítnut");
}
if(xhr.status == 500) {
$("#loader").html("Chyba serveru");
}
}
});
setTimeout(function(){dotaz();}, 2000);
}
dotaz();
我需要
setTimeout(function(){dotaz();}, cas);
答案 0 :(得分:1)
对不起,是吧?
function dotaz(){
//var cas;
$.ajax({
type: "GET",
url: "loader.php",
data: "promenna=1&promt=3&p="+Math.random(),
dataType: "json",
success: function(jdata){
$("#loader").html(jdata.promenna);
if(jdata.chyba == 0){
$("#loader").css({'background-color' : '#B90000'});
}
if(jdata.chyba == 1){
$("#loader").css({'background-color' : 'green'});
}
var cas = jdata.cas*1000;
setTimeout(function(){dotaz();}, cas);
},
error: function (xhr, ajaxOptions, thrownError){
if(xhr.status == 404) {
$("#loader").html("Soubor nenalezen");
}
if(xhr.status == 400) {
$("#loader").html("Špatný požadavek");
}
if(xhr.status == 403) {
$("#loader").html("Přístup zamítnut");
}
if(xhr.status == 500) {
$("#loader").html("Chyba serveru");
}
setTimeout(function(){dotaz();}, 5000);
}
});
}
dotaz()
答案 1 :(得分:1)
你试图创建一个循环,并且在ajax返回之后你想要在你的情况下超时2000毫秒。我会这样做:
function dotaz(cas){
setTimeout(function(){
$.ajax({
type: "GET",
url: "loader.php",
data: "promenna=1&promt=3&p="+Math.random(),
dataType: "json",
success: function(jdata){
$("#loader").html(jdata.promenna);
if(jdata.chyba == 0){
$("#loader").css({'background-color' : '#B90000'});
}
if(jdata.chyba == 1){
$("#loader").css({'background-color' : 'green'});
}
var new_cas = jdata.cas*1000;
dotaz(new_cas);
},
error: function (xhr, ajaxOptions, thrownError){
if(xhr.status == 404) {
$("#loader").html("Soubor nenalezen");
}
if(xhr.status == 400) {
$("#loader").html("Špatný požadavek");
}
if(xhr.status == 403) {
$("#loader").html("Prístup zamítnut");
}
if(xhr.status == 500) {
$("#loader").html("Chyba serveru");
}
setTimeout(function(){dotaz();}, 5000);
}
});
}, cas);
}
dotaz(1000)
在您提出请求之前暂停一下
答案 2 :(得分:0)
非常感谢,它看起来很实用。 我只是想问一下,脚本等待响应的时间有多长。假设我有一个执行50s的脚本 - Sleep(50),而Ajax将始终等待一个回复php文件,该文件已经给出了时间,重复多长时间。我仍然需要对待,何时在一段时间内从脚本获得响应,可能需要30秒再次调用该函数,并在某处写popřípadně超时错误。
代码:
<script>
function dotaz(idecko,cas){
setTimeout(function(){
$.ajax({
type: "GET",
url: "loader.php",
data: "promenna="+idecko+"&promt=3&p="+Math.random(),
dataType: "json",
success: function(jdata){
$("#hlavicka"+idecko).html(jdata.promenna);
$("#blok"+idecko).html(jdata.data);
if(jdata.stav == 0) { $("#box"+idecko).removeClass('err war').addClass('rdy'); }
if(jdata.stav == 1) { $("#box"+idecko).removeClass('err rdy').addClass('war'); }
if(jdata.stav == 2) { $("#box"+idecko).removeClass('rdy war').addClass('err'); }
var new_cas = jdata.cas*1000;
dotaz(idecko,new_cas);
},
error: function (xhr, ajaxOptions, thrownError){
if(xhr.status == 404) {
$("#paticka"+idecko).html("Soubor nenalezen");
}
if(xhr.status == 400) {
$("#paticka"+idecko).html("Špatný požadavek");
}
if(xhr.status == 403) {
$("#paticka"+idecko).html("Přístup zamítnut");
}
if(xhr.status == 500) {
$("#paticka"+idecko).html("Chyba serveru");
}
setTimeout(function(){dotaz(idecko);}, cas);
}
});
}, cas);
$('#info'+idecko).hover(
function () {
$('#udalost'+idecko).css({'display' : 'block'});
},
function () {
$('#udalost'+idecko).css({'display' : 'none'});
}
);
}
</script>
并调用此脚本:
<script>dotaz(2,0);</script>
2用于div id 2,0用于将第一个超时设置为0以立即执行。