2
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' ,则 ajax 应该终止。如果响应是“待定”,则 ajax 应该再轮询控制器 20 秒。我应该能够将响应传递给不同的 javascript 函数。是否可以在 ajax/jquery 中执行此操作?我是这项技术的新手。

4

6 回答 6

1

基本上扩展了迈克尔的答案

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);
}
于 2013-05-03T10:18:26.697 回答
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();
}
于 2013-05-03T06:29:59.267 回答
0

有一个内置的 jQuery ajax 超时属性,请使用这个:http ://api.jquery.com/jQuery.ajax/

timeout
Type: Number
Set a timeout (in milliseconds) for the request.

此处的示例:确定 $.ajax 错误是否为超时

于 2013-05-03T06:33:36.643 回答
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。

于 2013-05-03T10:01:10.067 回答
0
var ajaxtimeout = setTimeout(function(){...}

setTimeout(function() { clearTimeout(ajaxtimeout); }, 20000);

哦,你也必须调用.abort()你的请求对象,但我懒得重写你的代码:)

于 2013-05-03T06:16:18.837 回答
0

setTimeOut() 方法用于在指定的时间后调用 JS 函数。据我了解,这里的要求是只要响应消息为"pending"就保持连接处于活动状态。

如果来自服务器的响应消息是"pending",上面建议的代码将发送一个新的 Ajax 请求。

我会建议一个替代的服务器端解决方案,这在过去对我有用。如果操作成功或失败,您只会发回响应,并为该控制器配置请求超时(在您的情况下为 20 秒)。

希望这可以帮助。

于 2013-05-03T10:30:36.000 回答