function submitForm(){
var urlid = document.getElementById("actionUrl").value;
jQuery.support.cors = true;
setTimeout(function(){
$.ajax({
url:urlid,
type : "GET",
crossDomain : true,
data:transId,
success:function(data)
{
alert(data);
},
error: function (xhr, ajaxOptions, thrownError)
{
console.log(thrownError);
alert(xhr.status);
alert(ajaxOptions);
alert(thrownError);
}
});
},1000);
};
我有一个ajax调用,从控制器接收三个响应中的一个'true','false'或'pending'。如果响应为“true”或“false”,则ajax应终止。如果响应是“待定”,则ajax应该再次向控制器轮询20秒。我应该能够将响应传递给不同的javascript函数。是否可以在ajax / jquery中执行此操作?我是这项技术的新手。
答案 0 :(得分:1)
基本上延伸Michael的回答
function checkData (data) {
if (data == 'true') // do something
else if (data == 'false') // do something else
else if (data == 'pending') {
if ( !pollServer.stopPoll ) {
ajaxPoll = setTimeout(pollServer, 1000);
} else {
// polled long enough
}
}
}
function pollServer() {
$.ajax({
url: pollServer.urlid,
type: "GET",
crossDomain: true,
data: transId,
success: checkData
error: // error function
});
}
function submitForm(){
var urlid = document.getElementById("actionUrl").value;
jQuery.support.cors = true;
pollServer.urlid = urlid;
pollServer.stopPoll = false;
ajaxPoll = setTimeout(pollServer, 1000);
setTimeout(function() {
pollServer.stopPoll = true;
}, 20000);
}
答案 1 :(得分:0)
var ajaxtimeout = setTimeout(function(){...}
setTimeout(function() { clearTimeout(ajaxtimeout); }, 20000);
哦,你也必须在你的请求对象上调用.abort()
,但是我懒得重写你的代码:)
答案 2 :(得分:0)
这样的事情应该这样做:
function checkData (data) {
if (data == 'true') // do something
else if (data == 'false') // do something else
else if (data == 'pending') {
setTimeout(pollServer, 20000);
}
}
function pollServer() {
var urlid = document.getElementById("actionUrl").value;
$.ajax({
url: urlid,
type: "GET",
crossDomain: true,
data: transId,
success: checkData
error: // error function
});
}
function submitForm(){
jQuery.support.cors = true;
pollServer();
}
答案 3 :(得分:0)
有一个内置的jQuery ajax超时属性,请使用:http://api.jquery.com/jQuery.ajax/
timeout
Type: Number
Set a timeout (in milliseconds) for the request.
答案 4 :(得分:0)
function aftersuccess(data)
{
if(data=="success"){
document.getElementById("demo2").innerHTML = data;
}
else if(data=="false"){
document.getElementById("demo2").innerHTML = data; }
else{
setTimeout(submitForm,1000);
document.getElementById("demo2").innerHTML = data;
}
}
var xhr;
var i = 0;
var transId;
function submitForm(){
jQuery.support.cors = true;
var urlid = document.getElementById("actionUrl").value;
transId = document.getElementById("transId").value;
transId = 'transId='+transId;
xhr = $.ajax({
url:urlid,
type : "GET",
crossDomain : true,
data:transId,
success:function(data)
{
i = i+1;
aftersuccess(data);
},
error: function (xhr, ajaxOptions, thrownError)
{
console.log(arguments);
console.log(xhr.status);
console.log(ajaxOptions);
console.log(thrownError);
alert(xhr.status);
alert(ajaxOptions);
alert(thrownError);
}
});
if(i>20){
xhr.abort();
alert("Failed : "+transId)
window.location.href = "random url";
}
};
初始化变量i。每次调用ajax时它都会递增。达到特定值后,我中止ajax调用并重定向url。
答案 5 :(得分:0)
setTimeOut()方法用于在指定的时间后调用JS函数。据我所知,这里的要求是只要响应消息为“pending”就保持连接处于活动状态。
如果来自服务器的响应消息“待定”,上面建议的代码将发送新的Ajax请求。
我会建议另一种服务器端解决方案,这对我来说过去很有用。如果操作成功或失败,您只会发回响应,并为该控制器配置请求超时(例如,20秒)。
希望这会有所帮助。